<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
   "http://www.w3.org/TR/html4/frameset.dtd">
<html>
<head>
<title>iCalcreator 2.10.23 manual</title>
<meta name="author"      content="Kjell-Inge Gustafsson - kigkonsult">
<meta name="copyright"   content="2007-2011 Kjell-Inge Gustafsson - kigkonsult">
<meta name="keywords"    content="ical, calendar, calender, xcal, xml, icalender, rfc2445, vcalender, php, create">
<meta name="description" content="using iCalcreator v2.10.23">
<style type="text/css">
* {
  BACKGROUND-COLOR: white;
  COLOR           : black;
}
a {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : small;
}
a.ref {
  xbackground-color: transparent;
  background-color: inherit;
  FONT-FAMILY     : monospace, arial;
  FONT-SIZE       : small;
  FONT-STYLE      : normal;
  TEXT-DECORATION : none;
}
body {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : small;
  MARGIN-LEFT     : 10px;
  WIDTH           : 600px;
}
h1 {
  BACKGROUND-COLOR: silver;
  BORDER          : thin solid black;
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : x-large;
  FONT-WEIGHT     : bold;
  DISPLAY         : block;
}
h2 {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : large;
}
h3 {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : medium;
}
h4 {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : small;
  FONT-WEIGHT     : bold;
}
h5 {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : small;
  FONT-WEIGHT     : normal;
  TEXT-DECORATION : underline;
}
p {
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : small;
}
.bb {
  BORDER-BOTTOM   : gray dotted thin;
}
.blb {
  BORDER-LEFT     : gray dotted thin;
  BORDER-BOTTOM   : gray dotted thin;
  TEXT-ALIGN      : center;
}
.bl {
  BORDER-LEFT     : gray dotted thin;
}
.center {
  TEXT-ALIGN      : center;
}
p.comment {
  background-color: transparent;
  FONT-FAMILY     : monospace;
  FONT-SIZE       : medium;
  FONT-STYLE      : italic;
  FONT-WEIGHT     : 300;
  WHITE-SPACE     : pre;
}
span.comment {
  background-color: transparent;
  FONT-FAMILY     : monospace;
  FONT-SIZE       : medium;
}
.example {
  background-color: #DCDCDC;
  FONT-FAMILY     : Courier, "Courier New";
  FONT-SIZE       : small;
  FONT-WEIGHT     : 500;
  LINE-HEIGHT     : 1.2em;
  WHITE-SPACE     : pre;
}
.format {
  BORDER          : gray dotted thin;
  FONT-FAMILY     : Courier, "Courier New";
  FONT-SIZE       : small;
  FONT-WEIGHT     : 500;
  LINE-HEIGHT     : 1.5em;
  WHITE-SPACE     : pre;
}
.header {
  BACKGROUND-COLOR: silver;
  BORDER          : thin solid black;
  FONT-FAMILY     : "Lucida Grande","Lucida Sans Unicode", "Bitstream Vera Sans", Lucida, Arial, Geneva, Helvetica, sans-serif;
  FONT-SIZE       : xx-large;
  WIDTH           : 600px;
}
.label {
  FONT-FAMILY     : arial;
  FONT-SIZE       : small;
  FONT-WEIGHT     : bold;
  LETTER-SPACING  : 0.1em;
}
.quotes {
  background-color: transparent;
  FONT-FAMILY     : arial;
  FONT-SIZE       : small;
  xFONT-STYLE      : italic;
  FONT-WEIGHT     : 300;
  LETTER-SPACING  : 0.2em;
  WHITE-SPACE     : pre;
}
.ref {
  BACKGROUND-COLOR: transparent;
  FONT-FAMILY     : monospace, arial;
  FONT-SIZE       : x-small;
  xFONT-STYLE      : italic;
  xFONT-WEIGHT     : 600;
  VERTICAL-ALIGN  : top;
  LETTER-SPACING  : 0.2em;
}
.top {
  VERTICAL-ALIGN  : top;
}
</style>
</head>
<body>
<a name="top"></a>
<p class="header">iCalcreator 2.10.23</p>
iCalcreator class v2.10.23<br>
copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br>
<a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se/iCalcreator</a><br>
ical@kigkonsult.se<br>

<h2>Description:</h2>
iCalcreator is a <i>PHP</i> implementation of RFC2445/RFC2446 to manage iCal/xCal formatted files.
<br>

<a name="INTRO"></a><h1>1. INTRO</h1>
<p>
iCalcreator is a <i>PHP</i> class managing iCal formatted files for non-<i>calendar</i>
systems like CMS, project management systems and other applications able
to process <i>calendar</i> information like agendas, tasks, reports, todos,
journalling data and for communication with <i>calendar</i> systems and applications.
</p>
<p>
iCalcreator features create, parse, edit and select <i>calendar</i> and <i>calendar</i> components.
</p>
<p>
iCalcreator is built of a class file with support of a function class file and are <i>calendar</i>
component property oriented. Development environment is <i>PHP</i> version 5.x but coding is done
to meet 4.x backward compatibility and may work. Some functions requires <i>PHP</i> >= 5.2.0.
</p>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="iCal"></a><h2>1.1 Ical</h2>

The iCalendar format, as described in
<dl>
<dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format" target="_blank">rfc5545</a>
<dd>&quot;Internet Calendaring and Scheduling Core Object Specification (iCalendar)&quot;
<dt><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
<dd>&quot;iCalendar Transport-Independent Interoperability Protocol (iTIP)&quot;<br>Scheduling Events, BusyTime, To-dos and Journal Entries
</dl>
<p class="quotes">. ..allows for the capture and exchange of information<br>normally stored within a calendaring and scheduling application.</p>
and
<p class="quotes">. ..is an exchange format between applications or systems.</p>
<p><a href="http://kigkonsult.se/downloads/dl.php?f=rfc5545" title="Download RFC5545 in text format" target="_blank">rfc5545</a> and
<a href="http://kigkonsult.se/downloads/dl.php?f=rfc5546" title="Download RFC5546 in text format" target="_blank">rfc5546</a>
obsoletes, respectively,
<a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="Download RFC2445 in text format" target="_blank">rfc2445</a> and
<a href="http://kigkonsult.se/downloads/dl.php?f=rfc2446" title="Download RFC2446 in text format" target="_blank">rfc2446</a>.
</p>
<p>
A short iCal description is found at <a href="http://en.wikipedia.org/wiki/ICalendar#Core_object" title="iCalendar From Wikipedia, the free encyclopedia" target="_blank">Wikipedia</a>. If You are not familiar with iCal, read this first!
Knowledge of <i>calendar</i> protocol rfc5545/rfc5546 is to recommend.
</p>
<p>
Any references to rfc2445, below, corresponds to rfc5545.
</p>
<p>
All iCalcreator functions calls are made as simple as possible BUT (, !!!,) read these rfc's properly!
xCal (iCal xml) output format is supported but still experimental.
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="This_manual"></a><h2>1.2 This manual</h2>
This style is used for text.
<p class="format">This style is used for formats.</p>
<p class="example">This style is used for <i>PHP</i> coding examples.
<span class="comment"> // this style is used for coding comments.</span>
</p>
<p class="comment">This style is used for content details.</p>
<p class="quotes">This style is used for RFC2445 quotes.</p>
<p>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Versioning"></a><h2>1.3 Versioning</h2>

The release numbering convention used is major.minor(.micro&nbsp;/&nbsp;suffix).
<dl>
<dt>Major
<dd>Indicates a very large change in the core package. Rewrites or major milestones.
<dt>Minor
<dd>Significant amount of feature addition/modification.<br>odd number - development/experimental release<br> even number - production release
<dt>Micro
<dd>Primarily bug fix and maintenance number.
<dt>Suffix
<dd>rc1 for first release candidate etc.
</dl>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Support"></a><h2>1.4 Support</h2>
<p>
The main support channel is using iCalcreator
<a title="Sourceforge" href="http://sourceforge.net/projects/icalcreator/forums/" target="_blank">Sourceforge</a> forum.
</p>
<p>
Use the contact <a href="http://kigkonsult.se/contact/index.php" title="kigkonsult.se/contact" target="_blank">page</a>
for queries, improvement/development issues or professional support and development.
Please note that paid support or consulting service has the highest priority.
</p>
<p>
Our services are available for support and designing and developing iCalcreator etc. customizations,
adaptations and other <i>PHP</i>/MySQL solutions with a special focus on software utility and reliability,
supported through our iterative acquire/design/transition process modell.
</p>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Donate"></a><h2>1.5 Donate</h2>
<p>
You can show your appreciation for our free software,
and can support future development by making a donation to the kigkonsult project iCalcreator.
</p>
<p>
Make a donation of any size by clicking <a href="http://kigkonsult.se/contact/index.php#Donate" title="Donate" target="_blank">here</a>.
Thanks in advance!
</p>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="INSTALL"></a><h2>1.6 Install</h2>

<a name="Basic"></a><h3>1.6.1 Basic</h3>
Unpack to any folder<br>
- add this folder to your include-path<br>
- or unpack to your application-(include)-folder<br>
Add
<p class="format">require_once &quot;[folder/]iCalcreator.class.php&quot;;</p>
to your php-script.
<br>
<br>
If using php version 5.1 or higher, the default timezone need to be set/altered, now &quot;Europe/Stockholm&quot;,
line 50 in the iCalcreator.class.php file.
<br>
<br>
When creating a new <i>calendar</i>/component instance, review <a href="#Calendar_configuration_functions">config</a> settings.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Boost"></a><h3>1.6.2 Boost performance</h3>
To really boost performance, kigkonsult can now offer <i>PHP</i> (4 and 5) packages (iCalcreator etc) in byte coded files,
using <a href="http://www.ioncube.com" target="_blank"><u>ionCube</u></a> encoder.
<br>
<br>
Encoded files use a platform independent file format, and can be run on any platform for which ionCube supply a (free) Loader.
Currently supported platforms are Windows (e.g. NT, XP, W2K), Intel Linux, FreeBSD, NetBSD, OpenBSD, OS X, and Sparc Solaris.
<br>
<br>
Visit kigkonsult.se contact <a href="http://kigkonsult.se/contact/index.php" target="_blank"><u>page</u></a> for information and purchase.
<br>
<br>
Use basic install (above), install ionCube Loader (requires an update of &quot;php.ini&quot; or additional file in &quot;/etc/php.d&quot; folder AND the execute rights to use the <i>PHP</i> &quot;dl&quot; function) and simply replace the <i>PHP</i> class files with the encoded files.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Additional_Descriptors"></a><h2>1.7 Additional Descriptors</h2>
The following properties (as described in <a href="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" title="http://en.wikipedia.org/wiki/ICalendar#Calendar_extensions" target="_blank">wikipedia:iCal</a>) may be required when importing iCal files  into some calendaring software (MS etc.):
<dl>
<dt>on <i>calendar</i> level
<dd><a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
<dd><a href="#X-PROPERTY">X-WR-CALNAME</a> x-property
<dd><a href="#X-PROPERTY">X-WR-CALDESC</a> x-property
<dd><a href="#X-PROPERTY">X-WR-RELCALID</a> x-property <span class="comment">(a <a href="/wiki/Universally_Unique_Identifier" title="Universally Unique Identifier" class="mw-redirect">UUID</a>.)</span>
<dd><a href="#X-PROPERTY">X-WR-TIMEZONE</a> x-property
<dt>on component level
<dd><a href="#DTSTAMP">DTSTAMP</a> property (in iCalcreator created automatically, if not set)
<dd><a href="#UID">UID</a> property (in iCalcreator created automatically, if not set)
<dt>on component level in <a href="#VTIMEZONE">vtimezone</a> component
<dd><a href="#X-PROPERTY">X-LIC-LOCATION</a> x-property
</dl>
Recommendation is also to set <a href="#Unique_id">unique_id</a> when creating a new vcalendar/component instance, to ensure accurate setting of all components <a href="#UID">UID</a> property, even before <a href="#parse_merge">parse</a>.
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->setProperty( &quot;method&quot;,        &quot;PUBLISH&quot; )
$vcalendar->setProperty( &quot;x-wr-calname&quot;,  &quot;Calendar Sample&quot; );
$vcalendar->setProperty( &quot;X-WR-CALDESC&quot;,  &quot;Calendar Description&quot; );
$uuid = &quot;3E26604A-50F4-4449-8B3E-E4F4932D05B5&quot;;
$vcalendar->setProperty( &quot;X-WR-RELCALID&quot;, $uuid );
$vcalendar->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; );
.. .
</p>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Addendum"></a><h2>1.8 Addendum</h2>
<p>
Download iCalcreator <a title="download iCalcreator coding samples" href="http://kigkonsult.se/downloads/index.php#iCalcreator" target="_blank">coding samples</a>.
</p>
<dl>
<dt>Examples how to employ iCalcreator in software development
<dd><a title="tinycal" href="http://kigkonsult.se/tinycal/index.php" target="_blank">tinycal</a>, <i>calendar</i>-in-a-box.
<dd><a title="Create iCal event file on-demand from form" href="http://kigkonsult.se/eventCreator/index.php" target="_blank">The iCal file event editor</a>
</dl>
<p>
If you are downloading the iCalcreatorusing sub-package, there are free iCal/xCal icons in the images directory, to use as buttons on a web page.
</p>
The <i>PHP</i> coding in this document or &quot;coding samples&quot; (above) are only for display of usage, recommendation is to use a
coding standard, the following, incomplete, list is a good start;
<dl>
<dd><a href="http://www.dagbladet.no/development/phpcodingstandard/" target="_blank">http://www.dagbladet.no/development/phpcodingstandard/</a>
<!--
<br>
<a href="http://ez.no/ezpublish/documentation/development/standards/php" target="_blank">http://ez.no/ezpublish/documentation/development/standards/php</a>
-->
<dd><a href="http://framework.zend.com/manual/en/coding-standard.overview.html" target="_blank">http://framework.zend.com/manual/en/coding-standard.overview.html</a>
<!--
<br>
<a href="http://gforge.org/docman/view.php/1/2/coding-standards.html" target="_blank">http://gforge.org/docman/view.php/1/2/coding-standards.html</a>
-->
<dd><a href="http://pear.php.net/manual/en/standards.php" target="_blank">http://pear.php.net/manual/en/standards.php</a>
</dl>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="INDEX"></a><h2>1.9 INDEX</h2>

<a href="#INTRO">1. INTRO</a><br>
<br>
<a href="#iCal">1.1 Ical</a><br>
<a href="#This_manual">1.2 This manual</a><br>
<a href="#Versioning">1.3 Versioning</a><br>
<a href="#Support">1.4 Support</a><br>
<a href="#Donate">1.5 Donate</a><br>
<a href="#INSTALL">1.6 Install</a><br>
<a href="#Basic">1.6.1 Basic</a><br>
<a href="#Boost">1.6.2 Boost performance</a><br>
<a href="#Additional_Descriptors">1.7 Additional_Descriptors</a><br>
<a href="#Addendum">1.8 Addendum</a><br>
<a href="#INDEX">1.9 INDEX</a><br>
<br>
<a href="#Calendar_Component_list">2. Calendar Component list</a><br>
<br>
<a href="#VCALENDAR">2.1  VCALENDAR</a><br>
<a href="#VEVENT">2.2  VEVENT</a><br>
<a href="#VTODO">2.3  VTODO</a><br>
<a href="#VJOURNAL">2.4  VJOURNAL</a><br>
<a href="#VFREEBUSY">2.5  VFREEBUSY</a><br>
<a href="#VALARM">2.6  VALARM</a><br>
<a href="#VTIMEZONE">2.7  VTIMEZONE</a><br>
<a href="#CalProps">2.10  Component Properties</a><br>
<br>
<a href="#Function_list">3. Function list</a><br>
<br>
<a href="#Calendar_object_functions">3.1 Calendar object functions</a><br>
<br>
<a href="#Calendar_object_constructors">3.1.1 Constructors</a><br>
<a href="#vcalendar">3.1.1.1 vcalendar</a><br>
<a href="#vevent">3.1.1.2 vevent</a><br>
<a href="#vtodo">3.1.1.3 vtodo</a><br>
<a href="#vjournal">3.1.1.4 vjournal</a><br>
<a href="#vfreebusy">3.1.1.5 vfreebusy</a><br>
<a href="#valarm">3.1.1.6 valarm</a><br>
<a href="#vtimezone">3.1.1.7 vtimezone</a><br>
<a href="#standard">3.1.1.8 standard</a><br>
<a href="#daylight">3.1.1.9 daylight</a><br>
<br>
<a href="#Calendar_property_functions">3.1.2 Calendar property functions</a><br>
<a href="#deleteProperty">3.1.2.1 deleteProperty</a><br>
<a href="#getProperty">3.1.2.2 getProperty</a><br>
<a href="#setProperty">3.1.2.3 setProperty</a><br>
<a href="#CALSCALE">3.1.2.4 CALSCALE</a><br>
<a href="#METHOD">3.1.2.5 METHOD</a><br>
<a href="#VERSION">3.1.2.6 VERSION</a><br>
<a href="#X-PROPERTY">3.1.2.7 X-PROPERTY</a><br>
<br>
<a href="#Calendar_component_functions">3.1.3 Calendar component functions</a><br>
<a href="#deleteComponent">3.1.3.1 deleteComponent</a><br>
<a href="#getComponent">3.1.3.2 getComponent</a><br>
<a href="#newComponent">3.1.3.3 newComponent</a><br>
<a href="#selectComponents">3.1.3.4 selectComponents</a><br>
<a href="#setComponent">3.1.3.5 setComponent</a><br>
<br>
<a href="#Calendar_inputoutput_functions">3.1.4 Calendar input/output functions</a><br>
<a href="#parse_merge">3.1.4.1 parse and merge</a><br>
<a href="#createCalendar">3.1.4.2 createCalendar</a><br>
<a href="#returnCalendar">3.1.4.3 returnCalendar</a><br>
<a href="#saveCalendar">3.1.4.4 saveCalendar</a><br>
<a href="#sort">3.1.4.5 sort</a><br>
<a href="#useCachedCalendar">3.1.4.6 useCachedCalendar</a><br>
<br>
<a href="#Calendar_configuration_functions">3.1.5 Calendar configuration functions</a><br>
<a href="#configKeys">3.1.5.1 configuration keys</a><br>
<a href="#getConfig">3.1.5.2 getConfig</a><br>
<a href="#initConfig">3.1.5.3 <i>calendar</i>/component initialization</a><br>
<a href="#setConfig">3.1.5.4 setConfig</a><br>
<a href="#allowEmpty">3.1.5.5 Allow empty components</a><br>
<a href="#Compsinfo">3.1.5.6 Component information</a><br>
<a href="#Delimiter">3.1.5.7 Delimiter</a><br>
<a href="#Directory">3.1.5.8 Directory</a><br>
<a href="#Fileinfo">3.1.5.9 Fileinfo</a><br>
<a href="#Filename">3.1.5.10 Filename</a><br>
<a href="#Filesize">3.1.5.11 Filesize</a><br>
<a href="#Format">3.1.5.12 Format</a><br>
<a href="#Language">3.1.5.13 Language</a><br>
<a href="#NewlineChar">3.1.5.14 NewlineChar</a><br>
<a href="#dTZID">3.1.5.15 TZID</a><br>
<a href="#Unique_id">3.1.5.16 Unique_id</a><br>
<a href="#configURL">3.1.5.17 URL</a><br>
<br>
<a href="#Calendar_component_object_property_function_list">3.2 Calendar component/object property function list</a><br>
<br>
<a href="#deleteProperty_PROP">3.2.1 deleteProperty</a><br>
<a href="#getProperty_PROP">3.2.2 getProperty</a><br>
<a href="#parse">3.2.3 parse</a><br>
<a href="#setProperty_PROP">3.2.4 setProperty</a><br>
<br>
<a href="#ACTION">3.2.5 ACTION</a><br>
<a href="#ATTACH">3.2.6 ATTACH</a><br>
<a href="#ATTENDEE">3.2.7 ATTENDEE</a><br>
<a href="#CATEGORIES">3.2.8 CATEGORIES</a><br>
<a href="#CLASS">3.2.9 CLASS</a><br>
<a href="#COMMENT">3.2.10 COMMENT</a><br>
<a href="#COMPLETED">3.2.11 COMPLETED</a><br>
<a href="#CONTACT">3.2.12 CONTACT</a><br>
<a href="#CREATED">3.2.13 CREATED</a><br>
<a href="#DESCRIPTION">3.2.14 DESCRIPTION</a><br>
<a href="#DTEND">3.2.15 DTEND</a><br>
<a href="#DTSTAMP">3.2.16 DTSTAMP</a><br>
<a href="#DTSTART">3.2.17 DTSTART</a><br>
<a href="#DUE">3.2.18 DUE</a><br>
<a href="#DURATION">3.2.19 DURATION</a><br>
<a href="#EXDATE">3.2.20 EXDATE</a><br>
<a href="#EXRULE">3.2.21 EXRULE</a><br>
<a href="#FREEBUSY_PROP">3.2.22 FREEBUSY</a><br>
<a href="#GEO">3.2.23 GEO</a><br>
<a href="#LAST-MODIFIED">3.2.24 LAST-MODIFIED</a><br>
<a href="#LOCATION">3.2.25 LOCATION</a><br>
<a href="#ORGANIZER">3.2.26 ORGANIZER</a><br>
<a href="#PERCENT-COMPLETE">3.2.27 PERCENT-COMPLETE</a><br>
<a href="#PRIORITY">3.2.28 PRIORITY</a><br>
<a href="#RDATE">3.2.29 RDATE</a><br>
<a href="#RECURRENCE-ID">3.2.30 RECURRENCE-ID</a><br>
<a href="#RELATED-TO">3.2.31 RELATED-TO</a><br>
<a href="#REPEAT">3.2.32 REPEAT</a><br>
<a href="#REQUEST-STATUS">3.2.33 REQUEST-STATUS</a><br>
<a href="#RESOURCES">3.2.34 RESOURCES</a><br>
<a href="#RRULE">3.2.35 RRULE</a><br>
<a href="#SEQUENCE">3.2.36 SEQUENCE</a><br>
<a href="#STATUS">3.2.37 STATUS</a><br>
<a href="#SUMMARY">3.2.38 SUMMARY</a><br>
<a href="#TRANSP">3.2.39 TRANSP</a><br>
<a href="#TRIGGER">3.2.40 TRIGGER</a><br>
<a href="#TZID">3.2.41 TZID</a><br>
<a href="#TZNAME">3.2.42 TZNAME</a><br>
<a href="#TZOFFSETFROM">3.2.43 TZOFFSETFROM</a><br>
<a href="#TZOFFSETTO">3.2.44 TZOFFSETTO</a><br>
<a href="#TZURL">3.2.45 TZURL</a><br>
<a href="#UID">3.2.46 UID</a><br>
<a href="#URL">3.2.47 URL</a><br>
<a href="#X-PROPERTY_PROP">3.2.48 X-PROPERTY</a><br>
<br>
<a href="#Calendar_component_configuration_functions">3.3 Calendar Component configuration functions</a><br>
<br>
<a href="#Language_PROP">3.3.1 Language</a><br>
<br>
<a href="#Calendar_component_object_misc_functions">3.4 Calendar component object misc. functions</a><br>
<br>
<a href="#deleteComponent_PROP">3.4.1 deleteComponent</a><br>
<a href="#getComponent_PROP">3.4.2 getComponent</a><br>
<a href="#newComponent_PROP">3.4.3 newComponent</a><br>
<a href="#setComponent_PROP">3.4.4 setComponent</a><br>
<br>
<a href="#iCalUtilityFunctions">4. iCalUtilityFunctions</a><br>
<br>
<a href="#createTimezone">4.1 createTimezone</a><br>
<a href="#transformDateTime">4.2 transformDateTime</a><br>
<br>
<a href="#Copyright_and_Licence">5. COPYRIGHT AND LICENSE</a><br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>

<a name="Calendar_Component_list"></a><h1>2. Calendar Component list</h1>
Quote from <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar)!
(Described in iCal output format, content corresponds to xCal format.)<br>
<a name="VCALENDAR"></a><h2>2.1  VCALENDAR</h2>
<p class="center">icalobject = 1*(&quot;BEGIN&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF</p>
<p class="center">icalbody</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VCALENDAR&quot; CRLF)</p>
<br>
icalbody = calprops component
<br>
calprops = 2*(
<br>
<p class="center">&quot;prodid&quot; and &quot;version&quot; are both REQUIRED, but MUST NOT occur more than once
<p class="center">prodid / <a href="#VERSION">version</a> /</p>
<p class="center">&quot;calscale&quot;and &quot;method&quot;are optional, but MUST NOT occur more than once</p>
<p class="center"><a href="#CALSCALE">calscale</a> / <a href="#METHOD">method</a> /</p>
<p class="center"><a href="#X-PROPERTY">x-prop</a></p>
)
<br>
<p class="center">component  = 1*(<a href="#VEVENT">eventc</a> / <a href="#VTODO">todoc</a> / <a href="#VJOURNAL">journalc</a> / <a href="#VFREEBUSY">freebusyc</a> / <a href="#VTIMEZONE">timezonec</a> / iana-comp* / x-comp*)</p>
<p class="center">iana-comp  = &quot;BEGIN&quot; &quot;:&quot; iana-token CRLF</p>
<p class="center">1*contentline</p>
<p class="center">&quot;END&quot; &quot;:&quot; iana-token CRLF</p>
<p class="center">x-comp     = &quot;BEGIN&quot; &quot;:&quot; x-name CRLF</p>
<p class="center">1*contentline</p>
<p class="center">&quot;END&quot; &quot;:&quot; x-name CRLF</p>
*) <span class="comment">not supported by iCalcreator</span>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="VEVENT"></a><h2>2.2  VEVENT</h2>
<p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
<p class="center">eventprop *alarmc</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VEVENT&quot; CRLF</p>
eventprop = *(
<p class="center">the following are optional,but MUST NOT occur more than once</p>
<p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> /</p>
<p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PRIORITY">priority</a> / </p>
<p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> / </p>
<p class="center"><a href="#TRANSP">transp</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / <a href="#RECURRENCE-ID">recurid</a> /</p>
<p class="center">either &quot;<a href="#DTEND">dtend</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;eventprop&quot;, </p>
<p class="center">but &quot;<a href="#DTEND">dtend</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;eventprop&quot;</p>
<p class="center"><a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> /</p>
<p class="center">the following are optional, and MAY occur more than once</p>
<p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
<p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
<p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="VTODO"></a><h2>2.3  VTODO</h2>
<p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
<p class="center">todoprop *alarmc</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VTODO&quot; CRLF</p>
todoprop   = *(
<p class="center">the following are optional, but MUST NOT occur more than once</p>
<p class="center"><a href="#CLASS">class</a> / <a href="#COMPLETED">completed</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTAMP">dtstamp</a> / <a href="#DTSTART">dtstart</a> / </p>
<p class="center"><a href="#GEO">geo</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#LOCATION">location</a> / <a href="#ORGANIZER">organizer</a> / <a href="#PERCENT-COMPLETE">percent</a> / <a href="#PRIORITY">priority</a> / </p>
<p class="center"><a href="#RECURRENCE-ID">recurid</a> / <a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
<p class="center">either &quot;<a href="#DUE">due</a>&quot; or &quot;<a href="#DURATION">duration</a>&quot; may appear in a &quot;todoprop&quot;,</p>
<p class="center"> but &quot;<a href="#DUE">due</a>&quot; and &quot;<a href="#DURATION">duration</a>&quot; MUST NOT occur in the same &quot;todoprop&quot;</p>
<p class="center"><a href="#DUE">due</a> / <a href="#DURATION">duration</a> /</p>
<p class="center">the following are optional,and MAY occur more than once</p>
<p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> / </p>
<p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / </p>
<p class="center"><a href="#RELATED-TO">related</a> / <a href="#RESOURCES">resources</a> / <a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="VJOURNAL"></a><h2>2.4  VJOURNAL</h2>
<p class="center">journalc   = &quot;BEGIN&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
<p class="center">jourprop</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VJOURNAL&quot; CRLF</p>
jourprop   = *(
<p class="center">the following are optional, but MUST NOT occur more than once</p>
<p class="center"><a href="#CLASS">class</a> / <a href="#CREATED">created</a> / <a href="#DESCRIPTION">description</a> / <a href="#DTSTART">dtstart</a> / </p>
<p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#LAST-MODIFIED">last-mod</a> / <a href="#ORGANIZER">organizer</a> / <a href="#RECURRENCE-ID">recurid</a> / </p>
<p class="center"><a href="#SEQUENCE">seq</a> / <a href="#STATUS">status</a> / <a href="#SUMMARY">summary</a> /<a href="#UID">uid</a> / <a href="#URL">url</a> /</p>
<p class="center">the following are optional,and MAY occur more than once</p>
<p class="center"><a href="#ATTACH">attach</a> / <a href="#ATTENDEE">attendee</a> / <a href="#CATEGORIES">categories</a> / <a href="#COMMENT">comment</a> /</p>
<p class="center"><a href="#CONTACT">contact</a> / <a href="#EXDATE">exdate</a> / <a href="#EXRULE">exrule</a> / <a href="#RELATED-TO">related</a> / </p>
<p class="center"><a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="VFREEBUSY"></a><h2>2.5  VFREEBUSY</h2>
<p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
<p class="center">fbprop</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VFREEBUSY&quot; CRLF</p>
fbprop     = *(
<p class="center">the following are optional, but MUST NOT occur more than once</p>
<p class="center"><a href="#CONTACT">contact</a> / <a href="#DTSTART">dtstart</a> / <a href="#DTEND">dtend</a> / <a href="#DURATION">duration</a> / </p>
<p class="center"><a href="#DTSTAMP">dtstamp</a> / <a href="#ORGANIZER">organizer</a> / <a href="#UID">uid</a> / <a href="#URL">url</a> / </p>
<p class="center">the following are optional,and MAY occur more than once</p>
<p class="center"><a href="#ATTENDEE">attendee</a> / <a href="#COMMENT">comment</a> / <a href="#FREEBUSY_PROP">freebusy</a> / <a href="#REQUEST-STATUS">rstatus</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="VALARM"></a><h2>2.6  VALARM</h2>
<p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p>
<p class="center">(audioprop / dispprop / emailprop / procprop)</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VALARM&quot; CRLF</p> audioprop  = 2*(
<p class="center">&quot;<a href="#ACTION">action</a>&quot; and &quot;<a href="#TRIGGER">trigger</a>&quot; are both REQUIRED, but MUST NOT occur more than once</p>
<p class="center"><a href="#ACTION">action</a> / <a href="#TRIGGER">trigger</a> /</p>
<p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
<p class="center">but if one occurs, so MUST the other</p>
<p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
<p class="center">the following is optional, but MUST NOT occur more than once</p>
<p class="center"><a href="#ATTACH">attach</a> / </p>
<p class="center">the following is optional, and MAY occur more than once</p>
<p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
dispprop   = 3*(
<p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
<p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> /</p>
<p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional,and MUST NOT occur more than once each,</p>
<p class="center">but if one occurs, so MUST the other</p>
<p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
<p class="center">the following is optional, and MAY occur more than once</p>
<p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
emailprop  = 5*(
<p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
<p class="center"><a href="#ACTION">action</a> / <a href="#DESCRIPTION">description</a> / <a href="#TRIGGER">trigger</a> / <a href="#SUMMARY">summary</a></p>
<p class="center">the following is REQUIRED, and MAY occur more than once</p>
<p class="center"><a href="#ATTENDEE">attendee</a> / </p>
<p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
<p class="center">but if one occurs, so MUST the other</p>
<p class="center"><a href="#DURATION">duration</a> / <a href="#REPEAT">repeat</a> /</p>
<p class="center">the following are optional, and MAY occur more than once</p>
<p class="center"><a href="#ATTACH">attach</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
procprop   = 3*(
<p class="center">the following are all REQUIRED, but MUST NOT occur more than once</p>
<p class="center"><a href="#ACTION">action</a> / <a href="#ATTACH">attach</a> / <a href="#TRIGGER">trigger</a> /</p>
<p class="center">&quot;<a href="#DURATION">duration</a>&quot; and &quot;<a href="#REPEAT">repeat</a>&quot; are both optional, and MUST NOT occur more than once each,</p>
<p class="center">but if one occurs, so MUST the other</p>
<p class="center"><a href="#DURATION">duration</a> /
<a href="#REPEAT">repeat</a> /</p>
<p class="center">&quot;<a href="#DESCRIPTION">description</a>&quot; is optional, and MUST NOT occur more than once</p>
<p class="center"><a href="#DESCRIPTION">description</a> / </p>
<p class="center">the following is optional, and MAY occur more than once</p>
<p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="VTIMEZONE"></a><h2>2.7  VTIMEZONE</h2>
<p class="center">&quot;BEGIN&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
2*(
<p class="center">&quot;<a href="#TZID">tzid</a>&quot; is required, but MUST NOT occur more than once</p>
<p class="center"><a href="#TZID">tzid</a> / </p>
<p class="center">&quot;<a href="#LAST-MODIFIED">last-mod</a>&quot; and &quot;<a href="#TZURL">tzurl</a>&quot; are optional, but MUST NOT occur more than once</p>
<p class="center"><a href="#LAST-MODIFIED">last-mod</a> / <a href="#TZURL">tzurl</a> /</p>
<p class="center">one of &quot;standardc&quot; or &quot;daylightc&quot; MUST occur and each MAY occur more than once.</p>
<p class="center">standardc / daylightc /</p>
<p class="center">the following is optional, and MAY occur more than once</p>
<p class="center"><a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<p class="center">&quot;END&quot; &quot;:&quot; &quot;VTIMEZONE&quot; CRLF</p>
<p class="center">standardc  = &quot;BEGIN&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
<p class="center">tzprop</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;STANDARD&quot; CRLF</p>
<p class="center">daylightc  = &quot;BEGIN&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
<p class="center">tzprop</p>
<p class="center">&quot;END&quot; &quot;:&quot; &quot;DAYLIGHT&quot; CRLF</p>
<br>
tzprop     = 3*(
<p class="center">the following are each REQUIRED, but MUST NOT occur more than once</p>
<p class="center"><a href="#DTSTART">dtstart</a> / <a href="#TZOFFSETTO">tzoffsetto</a> / <a href="#TZOFFSETFROM">tzoffsetfrom</a> /</p>
<p class="center">the following are optional, and MAY occur more than once</p>
<p class="center"><a href="#COMMENT">comment</a> /<a href="#RDATE">rdate</a> / <a href="#RRULE">rrule</a> / <a href="#TZNAME">tzname</a> / <a href="#X-PROPERTY_PROP">x-prop</a></p>
)
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="CalProps"></a><h2>2.8  Component Properties</h2>
A comprehensive table showing relation between <i>calendar</i> components and properties.
<a href="#VTIMEZONE">vtimezone</a> properties are not included.
<br><br>
<table>
<tr>
<td>0-1</td>
<td colspan="8">OPTIONAL property, MUST NOT occur more than once.</td>
</tr>
<tr>
<td>0-m</td>
<td colspan="8">OPTIONAL property, MAY occur more than once.</td>
</tr>
<tr>
<td>0&nbsp;/&nbsp;1=1</td>
<td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br>If one occurs, so MUST the other</td>
</tr>
<tr>
<td>0*1</td>
<td colspan="8">A pair of OPTIONAL properties, MUST NOT occur more than once each.<br>If one occurs, so MUST NOT the other</td>
</tr>
<tr>
<td>1-m</td>
<td colspan="8">REQUIRED property, MAY occur more than once.</td>
</tr>
<tr>
<td>1</td>
<td colspan="8">REQUIRED property, MUST NOT occur more than once.</td>
</tr>
<tr>
<td colspan="9">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td class="bl bb center top" rowspan="2"><a class="ref" href="#VEVENT">v<br>e<br>v<br>e<br>n<br>t</a></td>
<td class="bl bb center top" rowspan="2"><a class="ref" href="#VTODO">v<br>t<br>o<br>d<br>o</a></td>
<td class="bl bb center top" rowspan="2"><a class="ref" href="#VJOURNAL">v<br>j<br>o<br>u<br>r<br>n<br>a<br>l</a></td>
<td class="bl bb center top" rowspan="2"><a class="ref" href="#VFREEBUSY">v<br>f<br>r<br>e<br>e<br>b<br>u<br>s<br>y</a></td>
<td class="bl top center" colspan="4"><a class="ref" href="#VALARM">v&nbsp;a&nbsp;l&nbsp;a&nbsp;r&nbsp;m</a></td>
</tr>
<tr>
<td class="bb">&nbsp;</td>
<td class="bl bb center ref"><br><br><br><br>a<br>u<br>d<br>i<br>o</td>
<td class="bl bb center ref"><br><br>d<br>i<br>s<br>p<br>l<br>a<br>y</td>
<td class="bl bb center ref"><br><br><br><br>e<br>m<br>a<br>i<br>l</td>
<td class="bl bb center ref">p<br>r<br>o<br>c<br>e<br>d<br>u<br>r<br>e</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#ACTION">action</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">1</td>
<td class="blb">1</td>
<td class="blb">1</td>
<td class="blb">1</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#ATTACH">attach</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb"></td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">0-m</td>
<td class="blb">1</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#ATTENDEE">attendee</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">1-m</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#CATEGORIES">categories</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#CLASS">class</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#COMMENT">comment</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#COMPLETED">completed</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#CONTACT">contact</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#CREATED">created</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#DESCRIPTION">description</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">1</td>
<td class="blb">1</td>
<td class="blb">0-1</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#DTEND">dtend</a></td>
<td class="blb">0*1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#DTSTAMP">dtstamp</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#DTSTART">dtstart</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#DUE">due</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">0*1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#DURATION">duration</a></td>
<td class="blb">0*1</td>
<td class="blb">0*1</td>
<td class="blb">&nbsp;</td>
<td class="blb">0-1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#EXDATE">exdate</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#EXRULE">exrule</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#FREEBUSY_PROP">freebusy</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#GEO">geo</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#LAST-MODIFIED">last-mod</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb"></td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#LOCATION">location</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#ORGANIZER">organizer</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#PERCENT-COMPLETE">percent</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#PRIORITY">priority</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#RDATE">rdate</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#RECURRENCE-ID">recurid</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#RELATED-TO">related</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#REPEAT">repeat</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
<td class="blb">0&nbsp;/&nbsp;1=1</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#RESOURCES">resources</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#RRULE">rrule</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#REQUEST-STATUS">rstatus</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#SEQUENCE">sequence</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#STATUS">status</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#SUMMARY">summary</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">1</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#TRANSP">transp</a></td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#TRIGGER">trigger</a></td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">1</td>
<td class="blb">1</td>
<td class="blb">1</td>
<td class="blb">1</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#UID">uid</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#URL">url</a></td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">0-1</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
<td class="blb">&nbsp;</td>
</tr>
<tr>
<td class="bb"><a class="ref" href="#X-PROPERTY_PROP">x-prop</a></td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
<td class="blb">0-m</td>
</tr>
</table>
<p>
If not set, the <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties
are automatically created by iCalcreator<br>
for <a href="#VEVENT">vevent</a>,<a href="#VTODO">vtodo</a>, <a href="#VJOURNAL">vjournal</a> and <a href="#VFREEBUSY">vfreebusy</a> components<br>
when using <i>calendar</i> functions <a href="#saveCalendar">saveCalendar</a> or <a href="#returnCalendar">returnCalendar</a><br>
or when fetching DTSTAMP/UID property value with the component function <a href="#getProperty_PROP">getProperty</a>.
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_Component_list">[up]</a>

<a name="Function_list"></a><h1>3. Function list</h1>

<a name="Calendar_object_functions"></a><h2>3.1 Calendar object functions</h2>

<a name="Calendar_object_constructors"></a><h3>3.1.1 Constructors</h3>
<a name="vcalendar"></a><h2>3.1.1.1 vcalendar</h2>
Create a new <a href="#VCALENDAR">VCALENDAR</a> object.
<p class="label">Format</p>
<p class="format">vcalendar()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="vevent"></a><h4>3.1.1.2 vevent</h4>
<p class="label">Format 1</p>
Create a new <a href="#VEVENT">VEVENT</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
<p class="format">newComponent( &quot;vevent&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$vevent->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VEVENT">VEVENT</a> object.
<p class="format">vevent()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vevent = new vevent();
$vevent->setProperty(...
...
$vcalendar->setComponent( $vevent );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="vtodo"></a><h4>3.1.1.3 vtodo</h4>
<p class="label">Format 1</p>
Create a new <a href="#VTODO">VTODO</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
<p class="format">newComponent( &quot;vtodo&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
$vtodo->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VTODO">VTODO</a> object.
<p class="format">vtodo()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtodo = new vtodo();
$vtodo->setProperty(...
...
$vcalendar->setComponent( $vtodo );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="vjournal"></a><h4>3.1.1.4 vjournal</h4>
<p class="label">Format 1</p>
Create a new <a href="#VJOUNAL">VJOURNAL</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
<p class="format">newComponent( &quot;vjournal&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vjournal = &amp; $vcalendar->newComponent( &quot;vjournal&quot; );
$vjournal->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VJOURNAL">VJOURNAL</a> object.
<p class="format">vjournal()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vjournal = new vjournal();
$vjournal->setProperty(...
...
$vcalendar->setComponent( $vjournal );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="vfreebusy"></a><h4>3.1.1.5 vfreebusy</h4>
<p class="label">Format 1</p>
Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
<p class="format">newComponent( &quot;vfreebusy&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vfreebusy = &amp; $vcalendar->newComponent( &quot;vfreebusy&quot; );
$vfreebusy->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VFREEBUSY">VFREEBUSY</a> object.
<p class="format">vfreebusy()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vfreebusy = new vfreebusy();
$vfreebusy->setProperty(...
...
$vcalendar->setComponent( $vfreebusy );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="valarm"></a><h4>3.1.1.6 valarm</h4>
<p class="label">Format 1</p>
Create a new <a href="#VALARM">VALARM</a> object using a component factory-method, returning a reference to the new (sub-)component.
<p class="format">newComponent( &quot;valarm&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$vevent->setProperty(...
...
$valarm = &amp; $vevent->newComponent( &quot;valarm&quot; );
$valarm->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VALARM">VALARM</a> object.
<p class="format">valarm()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vevent = new vevent();
$vevent->setProperty(...
...
$valarm = new valarm();
$valarm->setProperty(...
...
$vevent->setComponent( $valarm );
...
$vcalendar->setComponent( $vevent );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="vtimezone"></a><h4>3.1.1.7 vtimezone</h4>
<p>
The vtimezone component describe, at a minimum, the base offset from <b>UTC</b> for the time zone.
For dates with UTC DATE-TIME, read <a href="#DATE_WITH_UTC_TIME">this</a>!
</p>
<p class="label">Format 1</p>
Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object using a <i>calendar</i> factory-method, returning a reference to the new component.
<p class="format">newComponent( &quot;vtimezone&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VTIMEZONE">VTIMEZONE</a> object.
<p class="format">vtimezone()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = new vtimezone();
$vtimezone->setProperty(...
...
$vcalendar->setComponent( $vtimezone );
...
</p>
<br>
<h5>Creation of timezone components</h5>
It is possible to create timezone components, using a function in iCalUtilityFunctions class, <a href="#createTimezone">createTimezone</a>
and utilizing The <i>PHP</i> DateTimeZone class (<i>PHP</i> 5 >= 5.2.0).
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="standard"></a><h4>3.1.1.8 standard</h4>
<p class="label">Format 1</p>
Create a new <a href="#VTIMEZONE">VTIMEZONE</a> <b>standard</b> object using a component factory-method, returning a reference to the new (sub-)component.
<p class="format">newComponent( &quot;standard&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty(...
...
$standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
$standard->setProperty(...
...
$daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
$daylight->setProperty(...
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VTIMEZONE">VTIMEZONE</a> STANDARD object.
<p class="format">vtimezone( &quot;standard&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = new vtimezone();
$vtimezone->setProperty(...
...
$standard = new vtimezone( &quot;standard&quot; );
$standard->setProperty(...
...
$vtimezone->setComponent( $standard );
...
$daylight = new vtimezone( &quot;daylight&quot; );
$daylight->setProperty(...
...
$vtimezone->setComponent( $daylight );
...
$vcalendar->setComponent( $vtimezone );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>

<a name="daylight"></a><h4>3.1.1.9 daylight</h4>
<p class="label">Format 1</p>
Create a new <a name="VTIMEZONE">VTIMEZONE</a> <b>daylight</b> object using a component factory-method, returning a reference to the new (sub-)component.
<p class="format">newComponent( &quot;standard&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
...
$standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
...
$daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
...
</p>
<p class="label">Format 2</p>
Create a new <a href="#VTIMEZONE">VTIMEZONE</a> DAYLIGHT object.
<p class="format">vtimezone( &quot;daylight&quot; )</p>
<p class="label">Example</p>
<p class="example"></p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = new vtimezone();
...
$standard = new vtimezone( &quot;standard&quot; );
...
$vtimezone->setComponent( $standard );
$daylight = new vtimezone( &quot;daylight&quot; );
...
$vtimezone->setComponent( $daylight );
$vcalendar->setComponent( $vtimezone );
...
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Function_list">[up]</a>


<a name="Calendar_property_functions"></a><h3>3.1.2 Calendar property functions</h3>

<a name="deleteProperty"></a><h4>3.1.2.1 deleteProperty</h4>
General <i>calendar</i> deleteProperty function, simplifying removal of <i>calendar</i> properties.<br>
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
<p class="label">Format</p>
<p class="format">deleteProperty( [ string PropName [, int order=1 ] )</p>
<p class="comment">propName - case independent, rfc2445 component property names,
         unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
order    - if missing 1st/next occurrence,
           used with multiple (property) occurrences
</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
if( !$vcalendar->deleteProperty( &quot;method&quot; ))
&nbsp;&nbsp;echo "METHOD property not found";
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>

<a name="getProperty"></a><h4>3.1.2.2 getProperty</h4>
<p class="label">Format 1</p>
General <i>calendar</i> getProperty function, simplifying fetch of <i>calendar</i> properties.<br>
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
<p class="format">getProperty( [ string PropName [, int order=1 [, bool complete=FALSE ]]] )</p>
<p class="comment">propName - case independent, rfc2445 component property names,
         unknown/missing propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
order    - if missing 1st/next occurrence,
           used with multiply (property) occurrences
complete - FALSE (default) : output only property value
         - TRUE            : output =
      array( &quot;value&quot;=&gt; &lt;value&gt; ,&quot;params&quot; =&gt; &lt;parameter array&gt;)
</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$calscale = $vcalendar->getProperty( &quot;calscale&quot; );
.. .
</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $xprop = $vcalendar->getProperty( )) { // <span class="ref">get x-properties</span>
.. .
</p>
<a name="getProperty2">
<p class="label">Format 2</p>
Ability to fetch specific property (unique) values and number of occurrences. Supported properties are
<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#DTSTART">DTSTART</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>,
<a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a>, <a href="#UID">UID</a> or &quot;RECURRENCE-ID-UID&quot; (alt. &quot;R-UID&quot; ).
The search includes in <b>ALL</b> components within <i>calendar</i>.
<br><br>
Outputs an array( *[&lt;unique-property-value&gt; =&gt; &lt;number of occurrence&gt;] )<br>or an empty array if no hits.
The array is sorted by (asc.) key.
<br><br>
If a property contains multiple values (ex. &quot;CATAGORIES:course1,courseB&quot, &quot;LOCATION:London,Paris&quot; or &quot;RESOURCES:pc,developer&quot;), they are split into unique values.
<br><br>
To select components based on property values, see <a href="#selectComponents2">selectComponents</a> (Format 2).
<p class="format">getProperty( string PropName )</p>
<p class="comment">propName - case independent
<a href="#DTSTART">DTSTART</a> as argument returns dates, in format &quot;YYYYMMDD&quot;,
&quot;RECURRENCE-ID-UID&quot;returns <a href="#UID">UID</a> values for component(-s) where <a href="#RECURRENCE-ID">RECURRENCE-ID</a> is set.
<a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> values are prefixed by protocol like
&quot;MAILTO:chair@kigkonsult.se&quot;.
</p>
<p class="label">Example 1</p>
<p class="example">.. .
$attendees = $vcalendar->getProperty( &quot;ATTENDEE&quot; );
foreach( $attendees as $attendee => $occurrCount ) {
.. .
</p>
<p class="label">Example 2</p>
<p class="example">.. .
$startDates = $vcalendar->getProperty( &quot;DTSTART&quot; );
foreach( $startDates as $startDate => $occurrCount ) {
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>

<a name="setProperty"></a><h4>3.1.2.3 setProperty</h4>
General <i>calendar</i> setProperty function,simplifying insert of <i>calendar</i> properties.<br>
A successful update returns TRUE.
<p class="label">Format</p>
<p class="format">setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )</p>
propName case independent, strict rfc2445 <i>calendar</i> property names, unknown propName will be regarded as <a href="#X-PROPERTY">X-property</a>.
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
$vcalendar->setProperty( &quot;calscale&quot;, &quot;GREGORIAN&quot; );
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>

<a name="CALSCALE"></a><h4>3.1.2.4 CALSCALE</h4>
This property defines the <i>calendar</i> scale used for the <i>calendar</i> information specified in the iCalendar object.
<br><br>
The default value is &quot;GREGORIAN&quot;, implied when missing.
<h5>Delete CALSCALE</h5>
Remove CALSCALE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;calscale&quot; )</p>
<p class="label">Example</p>
<p class="example">$vcalendar->deleteProperty( &quot;CALSCALE&quot; );</p>
<h5>Get Calscale</h5>
Fetch property value.
<p class="label">Format</p>
<p class="format">getProperty( &quot;calscale&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$calscale = $vcalendar->getProperty( &quot;calscale&quot; );
.. .
</p>
<h5>Set CALSCALE</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;calscale&quot;, string value )</p>
<p class="label">Example</p>
<p class="example">
$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
$vcalendar->setProperty( &quot;calscale&quot;, &quot;GREGORIAN&quot; );
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>


<a name="METHOD"></a><h4>3.1.2.5 METHOD</h4>
This property defines the iCalendar object method associated with the <i>calendar</i> object.
<br><br>
METHOD property (value PUBLISH etc.) may be required when importing iCal files
into some calendaring software (MS etc.), as well as <a href="#X-PROPERTY">x-properties</a>
"X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE"
and the (automatically created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
<h5>Delete METHOD</h5>
Remove METHOD from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;METHOD&quot; )</p>
<p class="label">Example</p>
<p class="example">$vcalendar->deleteProperty( &quot;METHOD&quot; );</p>
<h5>Get METHOD</h5>
Fetch property value.
<p class="label">Format</p>
<p class="format">getProperty( &quot;method&quot; );</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$method = $vcalendar->getProperty( &quot;method&quot; )
.. .
</p>
<h5>Set METHOD</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;method&quot;, string value )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
$vcalendar->setProperty( &quot;method&quot;, &quot;PUBLISH&quot; )
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>


<a name="VERSION"></a><h4>3.1.2.6 VERSION</h4>
This property specifies the identifier corresponding to the highest version number or the minimum
and maximum range of the iCalendar specification that is required in order to interpret the iCalendar object.<br>
This property is always placed first in the <i>calendar</i> file.<br>
<h5>Get Version</h5>
Fetch property value.
<p class="label">Format</p>
<p class="format">getProperty( &quot;version&quot; )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$version = $vcalendar->getProperty( &quot;version&quot; )
.. .
</p>
<h5>Set Version</h5>
Insert property value.
Only version 2.0 valid, version is <b>AUTO</b> generated at <i>calendar</i> creation.
<p class="label">Format</p>
<p class="format">setProperty( &quot;version&quot;, string version )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
$vcalendar->setProperty( &quot;version&quot;, &quot;2.0&quot; )
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>

<a name="X-PROPERTY"></a><h4>3.1.2.7 X-PROPERTY</h4>
A <i>calendar</i>, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a <i>calendar</i>,
an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
<br><br>
X-properties "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE"  may be required when importing iCal files
into some calendaring software (MS etc.), as well as <a href="#METHOD">METHOD</a> property (value PUBLISH etc.)
and the (automatically created) <a href="#DTSTAMP">DTSTAMP</a> and <a href="#UID">UID</a> properties.
<h5>Delete X-PROPERTY</h5>
Remove X-PROPERTY from <i>calendar</i>.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vcalendar->deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; );</p>
<p class="label">Example 2</p>
Deleting all x-properties.
<p class="example">while( $vcalendar->deleteProperty())
  continue;</p>
<h5>Get X-PROPERTY</h5>
Fetch property value.
<p class="label">Format</p>
<p class="format">getProperty()<br>
getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
<p class="comment">output = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
<p class="format">getProperty( FALSE, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( propertyName<span class="ref">1</span>
              , array( &quot;value&quot;  =&gt; propertyData<span class="ref">2</span> )
                     , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span>))
</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $xprop = $vcalendar->getProperty( )) { //<span class="ref">read all x-props in a loop</span>
.. .
</p>
<p class="comment">$xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
if( $xprop = $vcalendar->getProperty( &quot;X-WR-TIMEZONE&quot; )) {
  //<span class="ref">if exists, read X-WR-TIMEZONE x-prop</span>
.. .
</p>
<p class="comment">$xprop = array( &quot;X-WR-TIMEZONE&quot;, propertyData<span class="ref">2</span> )</p>
<p class="label">Example 3</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) {
.. .
</p>
<p class="comment">$xprop = array( propertyName<span class="ref">1</span>
              , array( &quot;value &quot; =&gt; propertyData<span class="ref">2</span> )
                     , &quot;params &quot;=&gt; params<span class="ref">&nbsp;3</span> )
</p>
<h5>Set X-PROPERTY</h5>
Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
PropertyNames are always stored upperCase, ex. x-wr-calname =&gt; X-WR-CALNAME.
<p class="label">Format</p>
<p class="format">setProperty( propertyName, propertyData [, params ] )</p>
<p class="comment">propertyName<span class="ref">1</span> = Any property name with a &quot;X-&quot; prefix
propertyData<span class="ref">2</span> = Value type TEXT
params<span class="ref">3</span>       = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam] )
xparam        = *[ xparamkey =&gt; xparamvalue ]
propOrderNo   = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config ); // initiate new CALENDAR
 // <span class="ref">set some X-properties.. .</span>
$vcalendar->setProperty( &quot;x-wr-calname&quot;, &quot;Calendar Sample&quot; )
$vcalendar->setProperty( &quot;X-WR-CALDESC&quot;, &quot;Calendar Description&quot; );
$vcalendar->setProperty( &quot;X-WR-TIMEZONE&quot;, &quot;Europe/Stockholm&quot; );
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_property_functions">[up]</a>

<a name="Calendar_component_functions"></a><h3>3.1.3 Calendar component functions</h3>

<a name="deleteComponent"></a><h4>3.1.3.1 deleteComponent</h4>
Remove component from <i>calendar</i>.<br>
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
<p class="label">format 1</p>
Remove component with order number (1st=1, 2nd=2.. .).
<p class="format">deleteComponent( int orderNumber )</p>
<p class="label">format 2</p>
Remove component with component type (e.g. &quot;vevent&quot;) and order 1 alt. suborder number.
<p class="format">deleteComponent( string componentType [, int componentSuborderNumber])</p>
<p class="label">format 3</p>
Remove component with <a href="#UID">UID</a>. N.B <a href="#UID">UID</a> is NOT set for
<a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
<p class="format">deleteComponent( string <a href="#UID">UID</a> )</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcal = new vcalendar( $config );
$vcal->parse();
$vcal->deleteComponent( 1 );
$vcal->deleteComponent( &quot;vtodo&quot;, 2 );
$vcal->deleteComponent( &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;);
.. .
</p>
<p class="label">Example 2</p>
Deleting all components, using format 2 without order number.
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcal = new vcalendar( $config );
$vcal->parse();
.. .
while( $vcal->deleteComponent( &quot;vevent&quot;))
  continue;
.. .
$vtodo = $vcal->getComponent( &quot;vtodo&quot; );
while( $vtodo->deleteComponent( &quot;valarm&quot;))
  continue;
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>

<a name="getComponent"></a><h4>3.1.3.2 getComponent</h4>
Get component from <i>calendar</i>.<br>
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.

<p class="label">format 1</p>
Get next component, until end-of-components.
<p class="format">getComponent()</p>

<p class="label">format 2</p>
Get specific component with order number (1st=1, 2nd=2.. .).
<p class="format">getComponent( int orderNumber )</p>

<p class="label">format 3</p>
Get (first/next) component with component type (until end-of-components) alt.
get specific component with component type and suborder number (1st=1, 2nd=2.. .).
<p class="format">getComponent( string componentType [, int componentSuborderNumber])</p>

<p class="label">format 4</p>
Get (first/next) component with <a href="#UID">UID</a> as key. (<a href="#UID">UID</a> is NOT set for
<a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.)
<p class="format">getComponent( string <a href="#UID">UID</a> )</p>

<p class="label">format 5</p>
Get (first/next) component based on specific property contents;
<a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#CREATED">CREATED</a>, <a href="#COMPLETED">COMPLETED</a>, <a href="#DTSTAMP">DTSTAMP</a>, <a href="#LAST-MODIFIED">LAST-MODIFIED</a>, <a href="#RECURRENCE-ID">RECURRENCE-ID</a>,
<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>, <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a>, <a href="#UID">UID</a>.
For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit exists.
For the other, non-date, properties an exact (strict case) match is required.<br>
Note, <a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> values must be prefixed by protocol ex.&quot;MAILTO:chair@ical.net&quot;.

<p class="format">getComponent( array(*[string propertyName =&gt; string uniqueValue] ))</p>
<p class="comment">propertyName = property name, above
propertyData = unique property value (strict case),
               date format &quot;YYYYMMDD&quot; (if any side is DATE, only dates are used),
               datetime format &quot;YYYYMMDDTHHMMSS&quot;
</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $comp = $vcalendar->getComponent()) {
.. .
}
.. .
</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
if( $comp = $vcalendar->getComponent( 1 )) {
.. .
}
.. .
</p>
<p class="label">Example 3</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
if( $comp = $vcalendar->getComponent( &quot;vtodo&quot;, 2 ) {
.. .
}
.. .
</p>
<p class="label">Example 4</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$uid = &quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;;
if($comp = $vcalendar->getComponent( $uid ){
.. .
}
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>

<a name="newComponent"></a><h4>3.1.3.3 newComponent</h4>
Create component (<a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> / <a href="#VTIMEZONE">VTIMEZONE</a>)
using a <i>calendar</i> factory-method, returning a reference to the new component.
<p class="label">Format</p>
<p class="format">newComponent( string componentType )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
...
</p>

<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>

<a name="selectComponents"></a><h4>3.1.3.4 selectComponents</h4>
<p class="label">Format 1</p>
Selects  <a href="#VEVENT">EVENT</a> / <a href="#VTODO">VTODO</a> / <a href="#VJOURNAL">VJOURNAL</a> / <a href="#VFREEBUSY">VFREEBUSY</a> components from <i>calendar</i> on based on <b>dates</b> (notice <a href="#date_restriction">date restriction</a>), based on the initial <a href="#DTSTART">DTSTART</a> property
along with the <a href="#RRULE">RRULE</a>, <a href="#RDATE">RDATE</a>, <a href="#EXDATE">EXDATE</a> and <a href="#EXRULE">EXRULE</a> properties in the component.
If property <a href="#DTSTART">DTSTART</a> is missing in a <a href="#VTODO">VTODO</a> component then <a href="#DTSTART">DUE</a> is used.<br>
<br>
Limitations:
<ul>
<li>The values &quot;SECONDLY&quot; / &quot;MINUTELY&quot; / &quot;HOURLY&quot; in the &quot;FREQ&quot; rule part are NOT supported.
<li>If using components with properties<br />
<a href="#UID">UID</a> in combination with <a href="#SEQUENCE">SEQUENCE</a> and <a href="#RECURRENCE-ID">RECURRENCE-ID</a><br />
(i.e. an individual instance within the recurrence set),<br />
the <a href="#RECURRENCE-ID">RECURRENCE-ID</a> parameter &quot;RANGE&quot; (&quot;THISANDPRIOR&quot; / &quot;THISANDFUTURE&quot;) is NOT supported.<br>
</ul>
Requirement:
<ul>
<li><a href="#sort">sort</a> <b>MUST</b> be executed before &quot;selectComponents&quot;, notice example below.
</ul>
FALSE is returned if no selected component exists.
<p class="format">selectComponents([ int startYear, int startMonth, int startDay
                [, int endYear,   int endMonth,   int endDay
                [, mixed cType [, bool flat [,bool any [,bool split]]]]]])
</p>
Returns an array with components (events.. .).
For all recurrent instances of a <i>calendar</i> component, an x-property,
&quot;X-CURRENT-DTSTART&quot; and opt. also &quot;X-CURRENT-DTEND&quot; alt. &quot;X-CURRENT-DUE&quot;,
has been created with a TEXT content, &quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;
showing the current start and opt. also end alt. due date.<br>
Also a &quot;X-RECURRENCE&quot; x-property is set with order number (valid if selectComponents is called from DTSTART date).
<p class="comment">startYear  : start year  (4*digit),   default current year
startMonth : start month (1-2*digit), default current month
startDay   : start day   (1-2*digit), default current day
endYear    : end year    (4*digit),   default startYear
endMonth   : end month   (1-2*digit), default startMonth
endDay     : end day     (1-2*digit), default startDay
cType      : <i>calendar</i> component type(-s), string/array
                   (&quot;vevent&quot;, &quot;vtodo&quot;, &quot;vjournal&quot;, &quot;vfreebusy&quot;)
             FALSE (default) =&gt; all
flat       : TRUE =&gt; output : array[] (ignores split)
               component where recurrence pattern exists within period
             FALSE (default) =&gt; output : array[Year][Month][Day][]
any        : TRUE (default) =&gt; select components with recurrence pattern in period
             FALSE =&gt; only components that starts (DTSTART) within period
split      : TRUE (default) =&gt; one component copy for every day it occurs
                               within the period
             FALSE =&gt; one occurrence of component in output array,
                      start date/recurrence (start) date

valid         flat    any     split
combinations                          (defaults in upper case)
           1  FALSE   TRUE    TRUE
           2  FALSE   TRUE    false
           3  FALSE   false   [false] (split set to false if flat=FALSE and any=false)
           4  true    TRUE    [false] (split set to false if flat=true)
           5  true    false   [false] (split set to false if flat=true)
</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$vcalendar->sort();
$events_arr = $vcalendar->selectComponents( 2007,11,1,2007,11,30,&quot;vevent&quot;);
 // <span class="comment">select all events occurring 1-30 nov. 2007</span>
foreach( $events_arr as $year =&gt; $year_arr ) {
  foreach( $year_arr as $month =&gt; $month_arr ) {
    foreach( $month_arr as $day =&gt; $day_arr ) {
      foreach( $day_arr as $event ) {
        $currddate   = $event->getProperty( &quot;x-current-dtstart&quot; );
        <span class="comment">// if member of a recurrence set, returns
       // array(&quot; x-current-dtstart&quot;,
       // &lt;(string) date(&quot;Y-m-d&nbsp;[H:i:s][timezone/UTC&nbsp;offset]&quot;)&gt;)</span>
        $startDate   = $event->getProperty( &quot;dtstart&quot; );
        $summary     = $event->getProperty( &quot;summary&quot; );
        $description = $event->getProperty( &quot;description&quot; );
        .. .
</p>
<a name="selectComponents2"></a>
<p class="label">format 2</p>
Using this format, the function selects components based on specific property value(-s),
<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#LOCATION">LOCATION</a>, <a href="#ORGANIZER">ORGANIZER</a>, <a href="#PRIORITY">PRIORITY</a>, <a href="#RESOURCES">RESOURCES</a>, <a href="#STATUS">STATUS</a>, <a href="#SUMMARY">SUMMARY</a> or <a href="#UID">UID</a>.
For the property &quot;SUMMARY&quot; ,if a search value (any case) exists within property value, a hit is found.
For the other properties an exact (strict case) match is required.<br>
<a href="#ATTENDEE">ATTENDEE</a> and <a href="#ORGANIZER">ORGANIZER</a> search values must be prefixed by protocol ex. &quot;MAILTO:chair@ical.net&quot;.
Multiple search properties may coexist.
<br>
<br>
To retrieve property values, see <a href="#getProperty2">getProperty</a> (Format 2) on <i>calendar</i> level.
<p class="format">selectComponents( searchArray )</p>
Outputs an array of matched (unique) components in <a href="#UID">UID</a> order.
<p class="comment">searchArray   : array( propertyName =&gt; propertyValue )
propertyName  : above (any case)
propertyValue : string value / array( *[string value] )
</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$vcalendar->sort();
$searchArray = array( &quot;PRIORITY&quot; =&gt; array( 1, 2, 3, 4 ));
$highPrioArr = $vcalendar->selectComponents( $searchArray );
 // <span class="comment">select all components with PRIORITY set to high (1-4)</span>
if( !empty( $highPrioArr )) {
  $highPrioCal = new vcalendar( array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; ));
  $highPrioCal-&gt;setProperty( "X-WR-CALDESC", "High priority events" );
  foreach( $highPrioArr as $highPrioComponent )
    $highPrioCal-&gt;setComponent( $highPrioComponent );
  $highPrioCal-&gt;returnCalendar();
}
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>

<a name="setComponent"></a><h4>3.1.3.5 setComponent</h4>
Replace or update component in <i>calendar</i>.
Also add <i>calendar</i> component to <i>calendar</i> when <i>calendar</i> component is created with the procedural (<b>non</b>-factory) method,
see example <a href="#vevent">VEVENT</a>, format 2.
A successful update return TRUE.
<p class="label">format 1</p>
Insert last in component chain.
<p class="format">setComponent( component )
addComponent( component ) // <span class="ref">alias</span>
</p>
<p class="comment">addComponent, may be removed i future versions.</p>
<p class="label">format 2</p>
Insert/replace component with order number (1st=1, 2nd=2.. .).
If replace and orderNumber is not found, component is inserted last in chain.
<p class="format">setComponent( component, int orderNumber )</p>
<p class="label">format 3</p>
Replace component with component type and 1st alt. component order number.
If orderNumber is not found, component is inserted last in chain.
<p class="format">setComponent( component, string componentType [,int component suborder no])</p>
<p class="label">format 4</p>
Replace component with <a href="#UID">UID</a>.
N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a> components.
If <a href="#UID">UID</a> is not found, component is inserted last in chain.
<p class="format">setComponent( component, string <a href="#UID">UID</a> )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$vevent = vcalendar->getComponent( 1 );&nbsp;//<span class="comment">fetch first EVENT</span>
$vevent->setProperty( &quot;dtstart&quot;&nbsp;//<span class="comment">update <a class="ref" href="#DTSTART">DTSTART</a> property</span>
                    , 2006, 12, 24, 19, 30, 00 );
.. .
$vcalendar->setComponent( $vevent, 1 ); // replace first component
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_functions">[up]</a>

<a name="Calendar_inputoutput_functions"></a><h3>3.1.4 Calendar input/output functions</h3>

<a name="parse_merge"></a><h4>3.1.4.1 parse and merge</h4>
Parse iCal file(-s) or string/array <i>calendar</i>Content into a single vcalendar object (components, properties and parameters),
including multiple vcalendars (within a single ICS file) parse, e.g. Oracle Calendar exports.

<br><br>
As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported. A remote file, URL, <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.! Recommendation is to download (cache) remote file before parsing, due to execution time and control.
<br><br>
If missing, component property <a href="#UID">UID</a> is created when parsing. For that reason <a href="#Unique_id">UNIQUE_ID</a> might need to be set before parsing, Se examples below.
<br><br>
Notice <a href="#date_restriction">date restriction</a>!
<br><br>
If parse error  occurs (like file access error, invalid <i>calendar</i> file or <i>calendar</i> file without components), FALSE is returned.
<p class="label">Format</p>
<p class="format">parse( [ mixed textToParse ] )</p>
<p class="comment">textToParse = string calendarContent
                     ex. result from - file_get_contents( &quot;filename&quot;)
              array  calendarContent
                     ex. result from - file( &quot;filename&quot;, FILE_IGNORE_NEW_LINES )</p>
<p class="label">parse example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;, &quot;filename&quot; =&gt; &quot;file.ics&quot;);
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
.. .
</p>
<p class="label">parse example 2</p>
<p class="example">
$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;url&quot; =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
.. .
</p>
<p class="label">parse example 3</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;url&quot; =&gt; &quot;http://www.ical.net/calendars/calendar.ics&quot; );
$vcalendar = new vcalendar( $config );
...
$str = array(
&quot;BEGIN:VCALENDAR&quot;,
&quot;PRODID:-//kigkonsult.se//NONSGML kigkonsult.se iCalcreator 2.10.23//&quot;,
&quot;VERSION:2.0&quot;,
&quot;BEGIN:VEVENT&quot;,
&quot;DTSTART:20101224T190000Z&quot;,
&quot;DTEND:20101224T200000Z&quot;,
&quot;DTSTAMP:20101020T103827Z&quot;,
&quot;UID:20101020T113827-1234GkdhFR@test.org&quot;,
&quot;DESCRIPTION:example&quot;,
&quot;END:VEVENT&quot;,
&quot;END:VCALENDAR&quot;);
$vcalendar->parse( $str );
...
</p>
<p class="label">merge example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot; );
$vcalendar = new vcalendar( $config );

$vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;file1.ics&quot; );
$vcalendar->parse();

$vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;file2.ics&quot; );
$vcalendar->parse();

$vcalendar->sort();
$vcalendar->setConfig( &quot;directory&quot;,&nbsp;&quot;export&quot; );
$vcalendar->setConfig( &quot;filename&quot;,&nbsp;&nbsp;&quot;icalmerge.ics&quot; );
$vcalendar->saveCalendar();
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>

<a name="createCalendar"></a><h4>3.1.4.2 createCalendar</h4>
Generate and return <i>calendar</i> in a string, testing.. .?
<p class="label">Format</p>
<p class="format">createCalendar()</p>
<p class="label">Example</p>
<p class="example">.. .
$str = $vcalendar->createCalendar();
echo $str;
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>

<a name="returnCalendar"></a><h4>3.1.4.3 returnCalendar</h4>
Redirect <i>calendar</i> content to user browser. Filename, addressed to browser, is automatically generated if missing or not set;<br>
<span class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot; </span><br>
<p class="label">Format</p>
<p class="format">returnCalendar( [bool utf8Encode [, bool gzip ]] )</p>
<p class="comment">utf8Encode = TRUE: utf8 encoded output, FALSE: (default) no encoding
gzip       = TRUE: gzip compressed output and header &quot;Content-Encoding: gzip&quot; set,
             FALSE: (default) no compressing</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
.. .
$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$vevent->setProperty( &quot;dtstart&quot;, array( &quot;year&quot;  =&gt; 2007
                                      , &quot;month&quot; =&gt; 4
                                      , &quot;day&quot;   =&gt; 1
                                      , &quot;hour&quot;  =&gt; 19 ));
$vevent->setProperty( &quot;duration&quot;, 0, 0, 3 ));
$vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Plaza&quot; );
$vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
.. .
$vcalendar->returnCalendar();
</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$utf8Encode = TRUE;
$hacPar = &quot;HTTP_ACCEPT_ENCODING&quot;;
if( isset( $_SERVER[$hacPar] ) &amp;&amp;
  ( FALSE !== strpos( strtolower( $_SERVER[$hacPar] ), &quot;gzip&quot; )))
  $gzip = TRUE;
else
  $gzip = FALSE;
$vcalendar->returnCalendar( $utf8Encode, $gzip );
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>

<a name="saveCalendar"></a><h4>3.1.4.4 saveCalendar</h4>
Save ical <i>calendar</i> in a file, uses present directory if directory not set, filename is automatically generated if missing or not set;<br>
<span class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot; </span><br>
Directory/filename <b>must</b> be writeable, delimiter default <i>PHP</i> constant DIRECTORY_SEPARATOR.
<br><br>
As long as php.ini directive &quot;allow_url_fopen&quot; is enabled, remote files, URLs; protocol &quot;http&quot; (&quot;webcal&quot;), are supported. Recommendation is to save to a local file and upload later, due to execution time and control.
<br><br>
If file error occurs, FALSE is returned.
<p class="label">Format</p>
<p class="format">saveCalendar ( string directory/FALSE
            [, string filename/FALSE
            [, string delimiter/FALSE ]] )
</p>
Parameters for <span class="format">directory/filename/delimiter</span>, kept for backward compatibility,
may be removed i future versions. Recommendation is to use <span class="format">setConfig</span>, Se
example below.
<p class="label">Example</p>
<p class="example">.. .
$vcalendar->setConfig( array( &quot;directory&quot; =&gt; &quot;depot&quot;,
                              &quot;filename&quot;  =&gt; &quot;calendar.ics&quot; ));
$result = $vcalendar->saveCalendar();
if( !$result )
&nbsp;&nbsp;echo &quot;error when saving.. .&quot;
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>

<a name="sort"></a><h4>3.1.4.5 sort</h4>
<p class="label">Format 1</p>
Sort created/parsed <i>calendar</i> components on the following (prioritized) keys:<br>
1 - X-CURRENT-DTSTART - X-CURRENT-DTEND/X-CURRENT-DUE<br>
&nbsp;&nbsp;&nbsp;&nbsp;(if created in function <a href="#selectComponents">selectComponents</a>)<br>
1 - <a href="#DTSTART">DTSTART</a> - <a href="#DTEND">DTEND</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VEVENT">VEVENT</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components)<br>
1 - <a href="#DTSTART">DTSTART</a> - <a href="#DUE">DUE</a> alt. <a href="#DURATION">DURATION</a> (<a href="#VTODO">VTODO</a> components)<br>
1 - <a href="#DTSTART">DTSTART</a> (<a href="#VJOURNAL">VJOURNAL</a> components)<br>
2 - <a href="#CREATED">CREATED</a> / <a href="#DTSTAMP">DTSTAMP</a><br>
3 - <a href="#UID">UID</a><br>
<a href="#VTIMEZONE">VTIMEZONE</a> component(-s) are always sorted first in chain.<br>
Sub-components (<a href="#VTIMEZONE">STANDARD</a>&nbsp;/&nbsp;<a href="#VTIMEZONE">DAYLIGHT</a>&nbsp;/&nbsp;<a href="#VALARM">ALARM</a>), if exists, are not sorted.
<p class="format">sort()</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$vcalendar->sort();
$vcalendar->returnCalendar();
</p>

<p class="label">Format 2</p>
Sort created/parsed <i>calendar</i> components on specific property values and ascending order.
<p class="format">sort( sortArgument )</p>
<p class="comment">sortArgument: &quot;<a href="#ATTENDEE">ATTENDEE</a>&quot; / &quot;<a href="#CATEGORIES">CATEGORIES</a>&quot; / &quot;<a href="#DTSTAMP">DTSTAMP</a>&quot; / &quot;<a href="#LOCATION">LOCATION"</a>&quot; /
              &quot;<a href="#ORGANIZER">ORGANIZER</a>&quot; /&quot;<a href="#RESOURCES">RESOURCES</a>&quot; / &quot;<a href="#PRIORITY">PRIORITY</a>&quot; / &quot;<a href="#STATUS">STATUS</a>&quot; / &quot;<a href="#SUMMARY">SUMMARY</a>&quot;
              for a property where multiple occurrence may exist
              (<a href="#ATTENDEE">ATTENDEE</a>, <a href="#CATEGORIES">CATEGORIES</a>, <a href="#RESOURCES">RESOURCES</a> ),
              lowest (alphabetic) value is used as sort parameter.
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>

<a name="useCachedCalendar"></a><h4>3.1.4.6 useCachedCalendar</h4>
If recent version of local (non-empty and saved) <i>calendar</i> file exists, an HTTP redirect header is sent otherwise FALSE is returned.
<p class="label">Format</p>
<p class="format">useCachedCalendar( [ int timeout ] )
useCachedCalendar( string directory/FALSE
                 , string filename/FALSE
                 , string delimiter/FALSE
                [, int timeout ] )
</p>
<p class="comment">timeout  : default 3600 sec
Second format with parameters for <span class="format">directory/filename/delimiter</span>,<br>kept for backward compatibility, may be removed i future<br>versions. Recommendation is to use <span class="format">setConfig</span>, Se example below.</p>
<p class="label">Example</p>
<p class="example">.. .
$vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
$vcalendar->setConfig( &quot;filename&quot;, &quot;calendar.ics&quot; );
$vcalendar->useCachedCalendar();
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_inputoutput_functions">[up]</a>

<a name="Calendar_configuration_functions"></a><h3>3.1.5 Calendar configuration functions</h3>

<a name="configKeys"></a><h4>3.1.5.1 configuration keys</h4>
All configuration keys (allowEmpty, compsInfo etc.) case independent.
<br>
<br>
<table>
<tr>
<td class="bl bb">key</td>
<td class="bl bb"><i>calendar</i></td>
<td class="bl bb">component</td>
<td class="bl bb">remark</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#allowEmpty">allowEmpty</a></td>
<td class="bl bb center">*</td>
<td class="bl bb center">*</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Compsinfo">Compsinfo</a></td>
<td class="bl bb center">*</td>
<td class="bl bb center">*</td>
<td class="bl bb ref">getConfig only</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Delimiter">Delimiter</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Directory">Directory</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Filename">Filename</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Dirfile">Dirfile</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">getConfig only</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Filesize">Filesize</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">getConfig only</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Format">Format</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Language">Language</a></td>
<td class="bl bb center">*</td>
<td class="bl bb center">*</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#NewlineChar">NewlineChar</a></td>
<td class="bl bb center">*</td>
<td class="bl bb center">*</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#dTZID">TZID</a></td>
<td class="bl bb center">*</td>
<td class="bl bb center">*</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#Unique_id">Unique_id</a></td>
<td class="bl bb center">*</td>
<td class="bl bb center">*</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
<tr>
<td class="bl bb"><a class="ref" href="#configURL">URL</a></td>
<td class="bl bb center">*</td>
<td class="bl bb">&nbsp;</td>
<td class="bl bb ref">&nbsp;</td>
</tr>
</table>
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="getConfig"></a><h4>3.1.5.2 getConfig</h4>
<p class="format">getConfig( [string key )</p>
<p class="label">Example 1</p>
<p class="example">.. .
$filename = $vcalendar->getConfig( &quot;filename&quot; );
.. .</p>
In this example, notice <a href="#Filename">Filename</a>
<br>
<p class="label">Example 2</p>
<p class="example">.. .
$config = $vcalendar->getConfig();
.. .</p>
<p class="comment">Output= array( string key =&gt; mixed value
           *[, string key =&gt; mixed value] )</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="initConfig"></a><h4>3.1.5.3 calendar/component initialization</h4>
<p class="label">Format</p>
When creating a new <i>calendar</i>.
<p class="format">vcalendar( array( string key =&gt; mixed value *[,string key =&gt; mixed value]))</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
.. .
</p>
When creating a new <i>calendar</i> component.
<p class="format">component( array( string key =&gt; mixed value *[,string key =&gt; mixed value]))</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vevent = new vevent( $config );
.. .
</p>
<p class="label">Example 3</p>
<p class="example">. ..
$config = $vcalendar->getConfig();
$vevent = new vevent( $config );
.. .
</p>
Only component relevant configuration are set. If using the <a href="#newComponent">newComponent</a> function, configuration is set automatically.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="setConfig"></a><h4>3.1.5.4 setConfig</h4>
A successful &quot;setConfig&quot; returns TRUE.
<p class="label">Format 1</p>
<p class="format">setConfig( array( string key=>mixed value *[, string key=>mixed value]))</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar();
$vcalendar->setConfig( $config );
.. .
</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vevent = new vevent();
$vevent->setConfig( $config );
.. .
</p>
<p class="label">Format 2</p>
<p class="format">setConfig( string key, string value )</p>
<p class="label">Example 1</p>
<p class="example">$vcalendar = new vcalendar();
$vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
.. .
</p>
<p class="label">Example 2</p>
<p class="example">$vevent = new vevent();
$vevent->setConfig( &quot;unique_id&quot;, &quot;kigkonsult.se&quot; );
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="allowEmpty"></a><h4>3.1.5.5 Allow empty components</h4>
Allow or reject empty <i>calendar</i> properties, default allow (TRUE).

<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Compsinfo"></a><h4>3.1.5.6 Component information</h4>
Only to use with function getConfig.<br>
<br>
Get information about <i>calendar</i> components. Returns array with basic information
about all components (in array format) within <i>calendar</i>.
<p class="comment">Output   = array ( *compinfo )
compinfo = array ( &quot;ordno&quot; =&gt; int ordno,
                   // <span class="ref">order number (1st=1, 2nd=2..)</span>
                 , &quot;type&quot;  =&gt; string type
                   // <span class="ref">component type (vevent, vtodo.. .</span>
                 , &quot;uid&quot;   =&gt; string uid
                   // <span class="ref">component <a href="#UID">UID</a> (not for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">TIMEZONE</a>)</span>
                 , &quot;props&quot; =&gt;
                     array( *[ propertyName =&gt; Property count ])
                   // <span class="ref">for every set property</span>
                 , &quot;sub&quot;   =&gt; array( *compinfo ))
                   // <span class="ref">if subcomponents exists, an array for each subcomponent</span></p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$compsinfo = $vcalendar->getConfig( &quot;compsinfo&quot; );
foreach( $compsinfo as compinfo) {
&nbsp;echo &quot; order number : &quot;.$compinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
&nbsp;echo &quot; type : &quot;.$compinfo[&quot;type&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
&nbsp;echo &quot; UID : &quot;.$compinfo[&quot;uid&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
&nbsp;foreach( $compinfo[&quot;props&quot;] as $propertyName =&gt; $propertyCount )
&nbsp;&nbsp;echo &quot;  $propertyName = $propertyCount&quot;;
&nbsp;if( is_array( $compinfo[&quot;sub&quot;] )) {
&nbsp;&nbsp;foreach( $compinfo[&quot;sub&quot;] as $subcompinfo ) {
&nbsp;&nbsp;&nbsp;echo &quot; order number : &quot;.$subcompinfo[&quot;ordno&quot;].&quot;&lt;br&nbsp;/&gt;&quot;;
&nbsp;&nbsp;&nbsp;/* .. dito if subcomponents exists .. . */
&nbsp;&nbsp;}
&nbsp;}
}
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Delimiter"></a><h4>3.1.5.7 Delimiter</h4>
Directory/filename delimiter.
<br>
<br>
Default <i>PHP</i> constant DIRECTORY_SEPARATOR. If used, <b>must</b> be set BEFORE filename!
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Directory"></a><h4>3.1.5.8 Directory</h4>
Local directory to store/read iCal files, default &nbsp;&quot;<b>.</b>&quot;.
<br>
<br>
Directory <b>must</b> be set BEFORE <a href="#Filename">filename</a> and <b>must</b> exist and be writeable otherwise FALSE is returned.
If set using an config array and together with <a name="Filename"><u>Filename</u></a>, Directory are set first.
When setting Directory any previously set <a href="#configURL">URL</a> is removed.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Fileinfo"></a><h4>3.1.5.9 Fileinfo</h4>
Only available in function getConfig, giving information in array format about <a href="#Directory">directory</a>,  <a href="#Filename">filename</a> and <a href="#Filesize">filesize</a>.
<p class="label">Example</p>
<p class="example">$fileinfo = $vcalendar->getConfig( &quot;fileinfo&quot; );</p>
<p class="comment">output = array( &lt;directory&gt;, &lt;filename&gt;, &lt;filesize&gt; )</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Filename"></a><h4>3.1.5.10 Filename</h4>
iCal local file name, default created like (if not set):<br>
<p class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.ics&quot;;</p>
<p class="format">$filename = date( &quot;YmdHis&quot; ).&quot;.xml&quot;; <span class="comment"> // if <a href="#Format">format</a> set to &quot;xcal&quot;</span></p>
<br>
If not set, filename is created when requested, ex. in functions <a href="#saveCalendar">saveCalendar</a> or getConfig(&quot;filename&quot;).
<br>
<br>
Local filename <b>must</b> be set AFTER setting directory (and opt. delimiter)!
Filename (and opt. directory) <b>must</b> be readable/writeable otherwise FALSE is returned.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Filesize"></a><h4>3.1.5.11 Filesize</h4>
Only when getting configuration (using function getConfig).<br>
Returns the size of the file in bytes, to be called<br>
- after &quot;saveCalendar()&quot;<br>
or<br>
- after a &quot;setConfig( &quot;directory&quot; / &quot;filename&quot; )&quot; and before/after &quot;parse()&quot;.<br>
Getting the filesize for a remote file (URL) will always return zero.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Format"></a><h4>3.1.5.12 Format</h4>
Format for <i>calendar</i> output, &quot;iCal&quot;/&quot;xCal&quot;, any case.
<br>
&quot;iCal&quot; is default (rfc2445), &quot;xCal&quot; force xml formatted output.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Language"></a><h4>3.1.5.13 Language</h4>
Language for <i>calendar</i> and component TEXT value properties as defined in [RFC 1766].
<br>
<br>
If NOT set in TEXT property parameters, language from &quot;setConfig( &quot;language&quot;, ..&quot; at component level will be used, if set,
otherwise language from &quot;setConfig( &quot;language&quot;, ..&quot; at <i>calendar</i> level will be used, if set.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="NewlineChar"></a><h4>3.1.5.14 NewlineChar</h4>
Character(s) used for carriage return + line feed (CR+LF), default &quot;\r\n&quot;.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="dTZID"></a><h4>3.1.5.15 TZID</h4>
Default (local?) timezone, will be used if no TZID parameter is supplied when setting <a href="#DTSTART">DTSTART</a>, <a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a> or <a href="#RECURRENCE-ID">RECURRENCE-ID</a> (auto completion).
Note, some <i>calendar</i> software also require <a href="#Additional_Descriptors">X-WR-TIMEZONE</a> (to be set manually).
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Unique_id"></a><h4>3.1.5.16 Unique_id</h4>
Unique_id is used in property PRODID at <i>calendar</i> level and <a href="#UID">UID</a> at component level, both created automatically, if not set.
<p class="quotes">PRODID
The identifier is RECOMMENDED to be the identical syntax to the
[RFC 822] addr-spec. A good method to assure uniqueness is to put the
domain name or a domain literal IP address of the host on which.. .<p>
Default <b>AUTOMATICALLY</b> generated by using <i>PHP</i> function gethostbyname( $_SERVER[&quot;SERVER_NAME&quot;] )
when running in a web server environment or &quot;localhost&quot; when using command line interface.
Used when setting other (domain) name than server name.
<br>
<br>
A strong recommendation is <b>always</b> to set unique_id when creating a new vcalendar or component object,
to ensure accurate creation of all components <a href="#UID">UID</a> property, also before <a href="#parse">parse</a>, in case of missing <a href="#UID">UID</a>.
<br>
<br>

<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="configURL"></a><h4>3.1.5.17 URL</h4>
When managing remote files with URL (writing using <a href="#saveCalendar">saveCalendar()</a>, or reading using <a href="#parse">parse()</a>),
only protocol &quot;http&quot; (&quot;webcal&quot;) is supported,
i.e. url <b>must</b> be prefixed by &quot;http://&quot; (&quot;webcal://&quot;) and suffixed by a valid filename.
<br>
When setting URL, any previously set Directory is removed.<br>
The URL filename part can be retrieved by - getConfig( &quot;filename&quot; ).
<br>
<br>
When storing a remote iCal file locally, only directory need to be set,
filename remains unchanged (i.e. 1. set URL, 2. parse, 3. set directory).
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;url&quot;, &quot;http://www.iCal.net/depot/calendar.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$vcalendar->sort();
.. .
.. .
$vcalendar->setConfig( &quot;directory&quot;, &quot;depot&quot; );
$vcalendar->saveCalendar(); // <span class="ref">local save in &quot;depot&quot; folder, </span>
                            // <span class="ref">using original filename</span>
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_configuration_functions">[up]</a>

<a name="Calendar_component_object_property_function_list"></a><h2>3.2 Calendar component object property function list</h2>
<p>
All <i>calendar</i> component property functions for get/set data.<br>
For property format in detail, see
<a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
</p>
<a name="DATE_WITH_UTC_TIME"></a>
<span class="label">Notice:</span> for properties and DATE-TIME with <b>UTC</b> time.
<p class="quotes">RFC2445:
The date with UTC time, or absolute time, is identified by a LATIN
CAPITAL LETTER Z suffix character (US-ASCII decimal 90), the UTC
designator, appended to the time value. For example, the following
represents January 19, 1998, at 0700 UTC:
</p>
<p class="quotes">DTSTART:19980119T070000Z</p>
<p class="quotes">The <a href="#TZID">TZID</a> property parameter MUST <b>NOT</b> be applied to DATE-TIME
properties whose time values are specified in UTC.
</p>
<p>
<a name="date_restriction"></a>
<span class="label">Notice:</span> date limitation.<br>
Due to a limitation in <i>PHP</i> date functions, e.g. <span class="format">mktime</span>,
<span class="format">strtotime</span>, a date (e.g. while setting <a href="#DTSTART">DTSTART</a> property)
before &quot;January 1 1970 00:00:00 GMT&quot; may force a <i>PHP</i> date function to generate an error or set date to &quot;January 1 1970&quot;.
</p>
<a name="deleteProperty_PROP"></a><h3>3.2.1 deleteProperty</h3>
General <i>calendar</i> delete property function,simplifying removal of <i>calendar</i> properties.<br>
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
<p class="label">Format</p>
<p class="format">deleteProperty( [ string PropName [, int order=1 ] )</p>
<p class="comment">propName - case independent, rfc2445 component property names,
           unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
order    - if missing 1st/next occurrence,
           used with multiply (property) occurrences</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$e = $vcalendar->getComponent( &quot;vevent&quot; );
while( $e->deleteProperty( &quot;comment&quot; ))
&nbsp;&nbsp;continue;  // <span class="ref">remove all COMMENT properties</span>
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="getProperty_PROP"></a><h3>3.2.2 getProperty</h3>
General get property function, simplifying fetch of <i>calendar</i> properties.<br>
FALSE is returned if no property exists or when end-of-properties at consecutive function calls.
<p class="label">Format</p>
<p class="format">getProperty( string PropName [, int order=1 [, bool complete=FALSE ]] )</p>
<p class="comment">propName - case independent, rfc2445 component property names,
           unknown/missing propName will be used as <a href="#X-PROPERTY_PROP">X-property</a>.
order    - if missing/FALSE 1st/next occurrence,
           otherwise with multiply occurrences (1st=1, 2nd=2.. .)
complete - FALSE (default): output only property value
           TRUE           : output =
                             array(&quot;value&quot; =&gt; &lt;value&gt;
                                  ,&quot;params&quot;=&gt; &lt;parameter array&gt;)
</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;directory&quot; =&gt; &quot;import&quot;,
                 &quot;filename&quot;  =&gt; &quot;file.ics&quot; );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $vevent = $vcalendar->getComponent( &quot;vevent&quot; )) {
&nbsp;$dtstart = $vevent->getProperty( &quot;dtstart&quot; ); // <span class="ref">one occurrence</span>
&nbsp;$description = $vevent->getProperty( &quot;description&quot; ); // <span class="ref">one occurrence</span>
&nbsp;while( $comment = $vevent->getProperty( &quot;comment&quot; )) {
    // <span class="ref">MAY occur more than once</span>
&nbsp;.. .
&nbsp;}
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="parse"></a><h3>3.2.3 parse</h3>
Parse strict rfc2445 component property text and/or ALARMs.
<br><br>
A rfc2445 strict formatted property text, in string or array format and starting with property name.
<br>
<br>
Complete <a href="#VALARM">ALARM</a>s, all properties included, in array format and
first array row as &quot;BEGIN:VALARM&quot;, last as &quot;END:VALARM&quot;
as well as <a href="#VTIMEZONE">TIMEZONE</a> and standard/daylight subcomponents.
<br><br>
FALSE is returned if (read-file) problems occur.
<p class="label">Format</p>
<p class="format">parse( mixed propertyText )</p>
<p class="comment">
propertyText = string/array,
               rcf2445 formatted property/properties,
               property name <b>must</b> begin (first) line</p>
<p class="label">example</p>
<p class="example">.. .
$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$e->parse( &quot;DTSTAMP:19970324T1200Z&quot; );
$e->parse( &quot;SEQUENCE:0&quot; );
$e->parse( &quot;ORGANIZER:MAILTO:jdoe@host1.com&quot; );
$e->parse( array(
&quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host1.com&quot;,
&quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host2.com&quot;,
&quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host3.com&quot;,
&quot;ATTENDEE;RSVP=TRUE:MAILTO:jsmith@host4.com&quot; ));
$e->parse( &quot;DTSTART:19970324T123000Z&quot; );
$e->parse( &quot;DTEND:19970324T210000Z&quot; );
$e->parse( &quot;CATEGORIES:MEETING,PROJECT&quot; );
$e->parse( &quot;CLASS:PUBLIC&quot; );
$e->parse( &quot;SUMMARY:Calendaring Interoperability Planning Meeting&quot; );
$e->parse( &quot;STATUS:DRAFT&quot; );
$e->parse( array(
 &quot;DESCRIPTION:Project xyz Review Meeting Minutes&quot;
,&quot;Agenda&quot;
,&quot;1. Review of project version 1.0 requirements.&quot;
,&quot;2. Definition of project processes.&quot;
,&quot;3. Review of project schedule.&quot;
,&quot;Participants: John Smith, Jane Doe, Jim Dandy&quot;
,&quot;- It was decided that the requirements need to be signed off by &quot;.
 &quot;product marketing.&quot;
,&quot;- Project processes were accepted.&quot;
,&quot;- Project schedule needs to account for scheduled holidays and employee&quot;.
 &quot; vacation time. Check with HR for specific dates.&quot;
,&quot;- New schedule will be distributed by Friday.&quot;
,&quot;- Next weeks meeting is cancelled. No meeting until 3/23.&quot; ));
$e->parse( &quot;LOCATION:LDB Lobby&quot; );
$e->parse(
&quot;ATTACH;FMTTYPE=application/postscript:ftp://xyz.com/pub/conf/bkgrnd.ps&quot; );
$e->parse( array(
&quot;BEGIN:VALARM&quot;,
&quot;ACTION:AUDIO&quot;,
&quot;TRIGGER;VALUE=DATE-TIME:19970224T070000Z&quot;,
&quot;ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-files/ssbanner.aud&quot;,
&quot;REPEAT:4&quot;,
&quot;DURATION:PT1H&quot;,
&quot;X-alarm:non-standard ALARM property&quot;,
&quot;END:VALARM&quot; ));
$e->parse(
&quot;X-xomment:non-standard property will be displayed, comma escaped&quot;);
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="setProperty_PROP"></a><h3>3.2.4 setProperty</h3>
General set property function, simplifying insert of component properties. For properties where
multiple occurrences are allowed, last parameter is an index, implementing replaceProperty functionality.<br>
A successful update returns TRUE.
<p class="label">Format</p>
<p class="format">setProperty( string PropName, mixed Proparg_1 *[, mixed Proparg_n] )</p>
<p class="comment">propName case independent, rfc2445 component property names,
unknown propName will be regarded as <a href="#X-PROPERTY_PROP">X-property</a>.</p>
<p class="label">Example</p>
<p class="example">$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$vevent->setProperty( &quot;dtstart&quot;
                    , array(&quot;year&quot;=&gt;2007,&quot;month&quot;=&gt;4,&quot;day&quot;=&gt;1,&quot;hour&quot;=&gt;19));
$vevent->setProperty( &quot;duration&quot;, 0, 0, 3 ));
$vevent->setProperty( &quot;LOCATION&quot;, &quot;Central Plaza&quot; );
$vevent->setProperty( &quot;summary&quot;, &quot;PHP summit&quot; );
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="ACTION"></a><h3>3.2.5 ACTION</h3>
This property defines the action to be invoked when an <a href="#VALARM">VALARM</a> is triggered,<br> &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;. This property is REQUIRED and MUST NOT occur more than once.
<h5>Delete ACTION</h5>
Remove ACTION from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;Action&quot; )</p>
<p class="label">Example</p>
<p class="example">$valarm->deleteProperty( &quot;Action&quot; );</p>
<h5>Get ACTION</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;Action&quot; )</p>
<p class="comment">output = actionValue <span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;Action&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; actionValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$action = $valarm->getProperty( &quot;action&quot; );</p>
<h5>Set ACTION</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;Action&quot;, actionValue [, xparam ] )</p>
<p class="comment">actionValue<span class="ref">1</span> = one of &quot;AUDIO&quot; / &quot;DISPLAY&quot; / &quot;EMAIL&quot; / &quot;PROCEDURE&quot;
xparam<span class="ref">2</span>      = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$valarm->setProperty( &quot;action&quot;, &quot;DISPLAY&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="ATTACH"></a><h3>3.2.6 ATTACH</h3>
The property provides the capability to associate a document object with a <i>calendar</i> component. The property is
is REQUIRED and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;procedure&quot;),
OPTIONAL and MUST NOT occur more than once in an &quot;ALARM&quot; (&quot;ACTION&quot; &quot;audio&quot;) and
OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VALARM">VALARM</a> (&quot;ACTION&quot; &quot;email&quot;) components.
<br><br>
The default value type for ATTACH is URI. The value type can also be set to BINARY to indicate inline binary encoded content information (params <span class="ref">2</span>).
<h5>Delete ATTACH</h5>
Remove ATTACH from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;ATTACH&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$valarm->deleteProperty( &quot;ATTACH&quot; );</p>
<p class="label">Example 2</p>
Delete ATTACH property no 2.
<p class="format">$valarm->deleteProperty( &quot;ATTACH&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all ATTACH properties.
<p class="example">while( $valarm->deleteProperty( &quot;ATTACH&quot; ))
  continue;</p>
<h5>Get ATTACH</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;Attach&quot; )</p>
<p class="comment">output = attachValue<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;ATTACH&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; attachValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;Attach&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo ATTACH</p>
<p class="label">Example</p>
<p class="example">$attach = $valarm->getProperty( &quot;attach&quot; );</p>
<h5>Set ATTACH</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;attach&quot;, attachValue<span class="ref">1</span> [, params [, propOrderNo ]] )</p>
<p class="comment">attachValue<span class="ref">1</span> = URI / inline binary encoded content information.
params<span class="ref">2</span>      = array( [ &quot;ENCODING&quot; =&gt; &quot;BASE64&quot;, &quot;VALUE&quot; =&gt; &quot;BINARY&quot; ]
                      [, &quot;FMTTYPE&quot;  =&gt; contentType ]
                      [,&nbsp;xparam ] )
contentType  = The parameter value MUST be the TEXT for either
               an IANA registered content type or a non-standard
               content type.
xparam       = *[ xparamkey =&gt; xparamvalue ]
propOrderNo  = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;attach&quot;
                    , &quot;ftp://domain.com/pub/docs/agenda.doc&quot;
                    , array( &quot;FMTTYPE&quot; =&gt; &quot;application/binary&quot; ));
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="ATTENDEE"></a><h3>3.2.7 ATTENDEE</h3>
The property defines an "Attendee" within a <i>calendar</i> component and is OPTIONAL and MUST NOT occur more than once
in a VALARM (&quot;ACTION&quot; &quot;email&quot;), OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
<br><br>
This value type for ATTENDEE is URI, a <i>calendar</i> user address.
<h5>Delete ATTENDEE</h5>
Remove ATTENDEE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;ATTENDEE&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$valarm->deleteProperty( &quot;ATTENDEE&quot; );</p>
<p class="label">Example 2</p>
Delete ATTENDEE property no 2.
<p class="example">$valarm->deleteProperty( &quot;ATTENDEE&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all ATTENDEE properties.
<p class="example">while( $valarm->deleteProperty( &quot;ATTENDEE&quot; ))
  continue;</p>
<h5>Get ATTENDEE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;Attendee&quot; )</p>
<p class="comment">output = attendeeValue <span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;ATTENDEE&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; attendeeValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; array( params<span class="ref">2</span> ))</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;ATTENDEE&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo ATTENDEE</p>
<p class="label">Example</p>
<p class="example">$attendee = $valarm->getProperty( &quot;attendee&quot; );</p>
<h5>Set ATTENDEE</h5>
Insert property value. If exist, default parameter values are removed after input (params<span class="ref">2</span>).
Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ), if missing, &quot;mailto:&quot; is set (ex. indicating an internet mail address).
Also MEMBER and DIR parameters must be prefixed by protocol. DELEGATED-TO, DELEGATED-FROM, SENT-BY parameters must use protocol &quot;mailto:&quot;, prefixed if missing (ex. indicating an internet mail address).
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;attendee&quot;, attendeeValue [, params [, propOrderNo ]] )</p>
<p class="comment">attendeeValue<span class="ref">1</span> = a <i>calendar</i> user address, a URI as defined by
                 [RFC 1738] or any other IANA registered form
                 for a URI.
params<span class="ref">2</span>        = array( [CUTYPE] [,MEMBER] [,ROLE] [,PARTSTAT]
                       [,RVSP] [,DELEGATED-TO] [,DELEGATED-FROM]
                       [,SENT-BY] [,CN] [,DIR] [,LANGUAGE]
                       [,xparams] )
CUTYPE        = "CUTYPE" =&gt; &quot;INDIVIDUAL&quot;
                            (An individual, <b>Default</b>)
                          / &quot;GROUP&quot;
                            (A group of individuals)
                          / &quot;RESOURCE&quot;
                            (A physical resource)
                          / &quot;ROOM&quot;
                            (A room resource)
                          / &quot;UNKNOWN&quot;
                            (Otherwise not known)
                          / x-name
                            (Experimental type)
                          / iana-token
                            (Other IANA registered type)
MEMBER        = "MEMBER" =&gt; array( *[ &quot;single member
                            of the group or list membership&quot;])
ROLE          = "ROLE"   =&gt; &quot;CHAIR&quot;
                            (Indicates chair of the <i>calendar</i>
                             entity)
                          / &quot;REQ-PARTICIPANT&quot;
                            (required participation, <b>Default</b>)
                          / &quot;OPT-PARTICIPANT&quot;
                            (optional participation)
                          / &quot;NON-PARTICIPANT&quot;
                            (information purposes only)
                          / x-name
                            (Experimental role)
                          / iana-token
                            (Other IANA role)
PARTSTAT       = &quot;PARTSTAT&quot; =&gt; &quot;NEEDS-ACTION&quot;
                            (Event needs action, <b>Default</b>)
                          / &quot;ACCEPTED&quot;
                            (Event accepted)
                          / &quot;DECLINED&quot;
                            (Event declined)
                          / &quot;TENTATIVE&quot;
                            (Event tentatively accepted)
                          / &quot;DELEGATED&quot;
                            (Event delegated)
                          / &quot;NEEDS-ACTION&quot;
                            (To-do needs action, <b>Default</b>)
                          / &quot;ACCEPTED&quot;
                            (To-do accepted)
                          / &quot;DECLINED&quot;
                            (To-do declined)
                          / &quot;TENTATIVE&quot;
                            (To-do tentatively accepted)
                          / &quot;DELEGATED&quot;
                            (To-do delegated)
                          / &quot;COMPLETED&quot;
                            (To-do completed.
                              <a href="#COMPLETED">COMPLETED</a> property
                                 has date/time completed)
                          / &quot;IN-PROCESS&quot;
                            (To-do in process of being completed)
                          / &quot;NEEDS-ACTION&quot;
                            (Journal needs action, <b>Default</b>)
                          / &quot;ACCEPTED&quot;
                            (Journal accepted)
                          / &quot;DECLINED&quot;
                            (Journal declined)
                          / x-name
                            (Experimental status)
                          / iana-token
                            (Other IANA registered status)
RSVP           = &quot;RSVP&quot; =&gt; &quot;TRUE&quot;
                         / &quot;FALSE&quot;, <b>Default</b> (reply expectation)
DELEGATED-TO   = &quot;DELEGATED-TO&quot; =&gt; array(*[&quot;single <i>calendar</i> user
                                            to specified by the property
                                            has delegated participation&quot;])
DELEGATED-FROM = &quot;DELEGATED-FROM&quot; =&gt; array( *[ &quot;single <i>calendar</i> user that
                                                have delegated their
                                                participation to the
                                                <i>calendar</i> user specified
                                                by the property&quot; ] )
SENT-BY        = &quot;SENT-BY&quot; =&gt; single <i>calendar</i> user that is
                              acting on behalf
                              of the <i>calendar</i> user
                              specified by the property&quot;
LANGUAGE       = &quot;LANGUAGE&quot; =&gt; language for text values in CN parameter&quot;
CN             = &quot;CN&quot; =&gt; &quot;common name to be associated with the <i>calendar</i>
                          user specified by the property&quot;
DIR            = &quot;DIR&quot; =&gt; &quot;reference to a directory entry associated with
                           the <i>calendar</i> user specified by the property&quot;
xparam         = *[ xparamkey =&gt; xparamvalue ]
propOrderNo    = int ordernumber, 1=1st, 2=2nd etc</p>
See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;attendee&quot;
                    , &quot;attendee1@ical.net&quot;
$vevent->setProperty( &quot;attendee&quot;
                    , &quot;attendee2@ical.net&quot;
                    , array( &quot;cutype&quot;   =&gt; &quot;INDIVIDUAL&quot;
                           , &quot;member&quot;   =&gt; array( &quot;member1@ical.net&quot;
                                                , &quot;member2@ical.net&quot;
                                                , &quot;member3@ical.net&quot; )
                           , &quot;role&quot;     =&gt; &quot;CHAIR&quot;
                           , &quot;PARTSTAT&quot; =&gt; &quot;ACCEPTED&quot;
                           , &quot;RSVP&quot;     =&gt; &quot;TRUE&quot;
                           , &quot;DELEgated-to&quot; =&gt; array( &quot;part1@ical.net&quot;
                                                    , &quot;part2@ical.net&quot;
                                                    , &quot;part3@ical.net&quot; )
                           , &quot;delegateD-FROM&quot; =&gt;array( &quot;cio@ical.net&quot;
                                                     , &quot;vice.cio@ical.net&quot;)
                           , &quot;SENT-BY&quot;  =&gt; &quot;secretary@ical.net&quot;
                           , &quot;LANGUAGE&quot; =&gt; &quot;us-EN&quot;
                           , &quot;CN&quot;       =&gt; &quot;John Doe&quot;
                           , &quot;DIR&quot;      =&gt; &quot;http://www.ical.net/info.doc&quot;
                           , &quot;x-agenda&quot; =&gt; &quot;status reports&quot; <span class="comment">// xparam</span>
                           , &quot;x-length&quot; =&gt; &quot;15 min&quot;  ));    <span class="comment">// xparam</span>
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="CATEGORIES"></a><h3>3.2.8 CATEGORIES</h3>
This property defines the categories for a <i>calendar</i> component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
The value type for CATEGORIES is TEXT.
<h5>Delete CATEGORIES</h5>
Remove CATEGORIES from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;CATEGORIES&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;CATEGORIES&quot; );</p>
<p class="label">Example 2</p>
Delete CATEGORIES property no 2.
<p class="example">$vevent->deleteProperty( &quot;CATEGORIES&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all CATEGORIES properties.
<p class="example">while( $vevent->deleteProperty( &quot;CATEGORIES&quot; ))
  continue;</p>
<h5>Get CATEGORIES</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;CATEGORIES&quot; )</p>
<p class="comment">output = categoryValue<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;CATEGORIES&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; categories<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;CATEGORIES&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo CATEGORIES</p>
<p class="label">Example</p>
<p class="example">$categories = $valarm->getProperty( &quot;categories&quot; );</p>
<h5>Set CATEGORIES</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;categories&quot;, mixed categories [, params [, propOrderNo ]] )</p>
<p class="comment">categories<span class="ref">1</span>   = string categoryValue / array( *categoryValue )
categoryValue<span class="ref"> </span>= textual categories or subtypes of the <i>calendar</i> component,
                can be specified as a list of categories
                separated by the COMMA character
params<span class="ref">2</span>       = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;][, xparam] )
xparam<span class="ref"> </span>       = *[ xparamkey =&gt; xparamvalue ]
propOrderNo<span class="ref"> </span>  = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;categories&quot;, &quot;project_x&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="CLASS"></a><h3>3.2.9 CLASS</h3>
This property defines the access classification for a <i>calendar</i> component and is OPTIONAL
and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
<h5>Delete CLASS</h5>
Remove CLASS from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;CLASS&quot; )</p>
<p class="label">Example</p>
<p class="example">$vjournal->deleteProperty( &quot;CLASS&quot; );</p>
<h5>Get CLASS</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;CLASS&quot; )</p>
<p class="comment">output = classValue<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;CLASS&quot;, FALSE , TRUE )</p>
<p class="comment">output = array &quot;value&quot;   =&gt; classValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$class = $valarm->getProperty( &quot;class&quot; );</p>
<h5>Set CLASS</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;class&quot;, string classvalue [, xparam ] )</p>
<p class="comment">classvalue<span class="ref">1</span> = &quot;PUBLIC&quot;
            / &quot;PRIVATE&quot;
            / &quot;CONFIDENTIAL&quot;
            / iana-token
            / x-name
xparam<span class="ref">2</span>     = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;class&quot;, &quot;CONFIDENTIAL&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="COMMENT"></a><h3>3.2.10 COMMENT</h3>
This property specifies non-processing information intended to provide a comment to the <i>calendar</i> user
and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VFREEBUSY">VFREEBUSY</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br><br>
The value type for COMMENT is TEXT.
<h5>Delete COMMENT</h5>
Remove COMMENT from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;COMMENT&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;COMMENT&quot; );</p>
<p class="label">Example 2</p>
Delete COMMENT property no 2.
<p class="example">$vevent->deleteProperty( &quot;COMMENT&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all COMMENT properties.
<p class="example">while( $vevent->deleteProperty( &quot;COMMENT&quot; ))
  continue;</p>
<h5>Get COMMENT</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;COMMENT&quot; )</p>
<p class="comment">output = commentValue<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;COMMENT&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; commentValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;COMMENT&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo COMMENT</p>
<p class="label">Example</p>
<p class="example">$comment = $vevent->getProperty( &quot;comment&quot; );</p>
<h5>Set COMMENT</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;comment&quot;, commentValue [, params [, propOrderNo ]] )</p>
<p class="comment">commentValue<span class="ref">1</span> = Value type Text
params<span class="ref">2</span>       = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
                      [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
                      [, xparam ] )
xparam        = *[ xparamkey =&gt; xparamvalue ]
propOrderNo   = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;comment&quot;, &quot;this is a comment&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="COMPLETED"></a><h3>3.2.11 COMPLETED</h3>
This property defines the date and time that a <a href="#VTODO">VTODO</a> was actually completed and is OPTIONAL and MUST NOT occur more than once.<br><br>
The value type for COMPLETED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
<h5>Delete COMPLETED</h5>
Remove COMPLETED from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;COMPLETED&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtodo->deleteProperty( &quot;COMPLETED&quot; );</p>
<h5>Get COMPLETED</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;COMPLETED&quot; )</p>
<p class="comment">output = completedDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;COMPLETED&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; completedDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$completed = $vtodo->getProperty( &quot;completed&quot; );</p>
<h5>Set COMPLETED</h5>
Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime from local to UTC datetime.
<p class="label">Format</p>
<p class="format">setProperty( &quot;completed&quot;, completedDate [, xparam ] )</p>
<p class="comment">completedDate<span class="ref">1</span> = array( &quot;year&quot;  =&gt; int year
                      , &quot;month&quot; =&gt; int month
                      , &quot;day&quot;   =&gt; int day
                     [, &quot;hour&quot;  =&gt; int hour
                      , &quot;min&quot;   =&gt; int min
                      , &quot;sec&quot;   =&gt; int sec
                      , &quot;tz&quot;    =&gt; offset ]] )
completedDate  = int year
               , int month
               , int day
              [, int hour
               , int min
               , int sec ]
completedDate  = array( int year
                      , int month
                      , int day
                     [, int hour
                      , int min
                      , int sec
                     [, offset ]] )
completedDate  = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset])
completedDate  = string datestring // <span class="ref">string date,
                                      acceptable by strtotime function,
                                      ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
                                      (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
offset         = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
xparam<span class="ref">2</span>        = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;);
$vcalendar = new vcalendar( $config );
$vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
.. .
$vtodo->setProperty( &quot;completed&quot;, 2006, 8, 10, 10, 0, 0 );
  // <span class="ref">10 august 2006 10.00  UTC</span></p>
<p class="label">Example 2</p>
<p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
              &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
 // <span class="ref">local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
$vtodo->setProperty( &quot;completed&quot;, $date );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="CONTACT"></a><h3>3.2.12 CONTACT</h3>
The property is used to represent textual contact information or alternately a reference to textual contact information associated with the <i>calendar</i> component. The property is OPTIONAL and MUST NOT occur more than once in a VFREEBUSY or MAY occur more than once  in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
The value type for CONTACT is TEXT.
<h5>Delete CONTACT</h5>
Remove CONTACT from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;CONTACT&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;CONTACT&quot; );</p>
<p class="label">Example 2</p>
Delete CONTACT property no 2.
<p class="example">$vevent->deleteProperty( &quot;CONTACT&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all CONTACT properties.
<p class="example">while( $vevent->deleteProperty( &quot;CONTACT&quot; ))
  continue;</p>
<h5>Get CONTACT</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;CONTACT&quot; )</p>
<p class="comment">output = contactValue<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;CONTACT&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; contactValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;CONTACT&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo CONTACT</p>
<p class="label">Example</p>
<p class="example">$contact = $vevent->getProperty( &quot;contact&quot; );</p>
<h5>Set CONTACT</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;contact&quot;, contactValue [, params [, propOrderNo ]] )</p>
<p class="comment">contactValue<span class="ref">1</span> = Value type TEXT
params<span class="ref">2</span>       = array ( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
                        [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
                        [, xparam] )
xparam        = *[ xparamkey =&gt; xparamvalue ]
propOrderNo   = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$c->setProperty( &quot;contact&quot;, &quot;tel 012-34 56 789&quot; )</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="CREATED"></a><h3>3.2.13 CREATED</h3>
This property specifies the date and time that the <i>calendar</i> information was created by the <i>calendar</i> user agent in the <i>calendar</i> store. Note: This is analogous to the creation date and time for a file in the file system. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
The value type for CREATED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
<h5>Delete CREATED</h5>
Remove CREATED from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;CREATED&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;CREATED&quot; );</p>
<h5>Get CREATED</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;CREATED&quot; )</p>
<p class="comment">output = createdDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;CREATED&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; createdDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$created = $vevent->getProperty( &quot;CREATED&quot; );</p>
<h5>Set CREATED</h5>
Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime from local to UTC datetime.
<p class="label">Format</p>
<p class="format">setProperty( &quot;created&quot;, [ createdDate [, xparam ]] )</p>
<p class="comment">createdDate<span class="ref">1</span> = array( &quot;year&quot;  =&gt; int year
                    , &quot;month&quot; =&gt; int month
                    , &quot;day&quot;   =&gt; int day
                   [, &quot;hour&quot;  =&gt; int hour
                    , &quot;min&quot;   =&gt; int min
                    , &quot;sec&quot;   =&gt; int sec
                    , &quot;tz&quot;    =&gt; offset ]] )
createdDate  = int year
             , int month
             , int day
            [, int hour
             , int min
             , int sec ]
createdDate  = array( int year
                    , int month
                    , int day
                   [, int hour
                    , int min
                    , int sec
                   [, offset ]] )
createdDate  = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset ])
createdDate  = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
offset       = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
xparam<span class="ref">2</span>      = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
.. .
$vtodo->setProperty( &quot;created&quot;, 2006, 8, 11, 14, 30, 35 );
 // <span class="ref">11 august 2006 14.30.35 UTC</span>	</p>
<p class="label">Example 2</p>
<p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
              &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
 // <span class="ref">local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
$vtodo->setProperty( &quot;created&quot;, $date );
.. .</p>
<p class="label">Example 3</p>
<p class="example">$vevent->setProperty( &quot;created&quot; );
 // <span class="ref">current UTC date-time is set if called without parameters</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="DESCRIPTION"></a><h3>3.2.14 DESCRIPTION</h3>
This property provides a more complete textual description of the <i>calendar</i> component, than that provided by the <a href="#SUMMARY">SUMMARY</a> property (, analogous to a mail BODY). The property is OPTIONAL, MUST NOT occur more than once within <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> or <a href="#VALARM">VALARM</a> (PROCEDURE) but can be specified multiple times within a <a href="#VJOURNAL">VJOURNAL</a> <i>calendar</i> component. The property is REQUIRED in  <a href="#VALARM">VALARM</a> (DISPLAY, EMAIL) component.<br><br>
The value type for DESCRIPTION is TEXT.
<h5>Delete DESCRIPTION</h5>
Remove DESCRIPTION from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;DESCRIPTION&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;DESCRIPTION&quot; );</p>
<p class="label">Example 2</p>
Delete DESCRIPTION property no 2.
<p class="example">$vjournal->deleteProperty( &quot;DESCRIPTION&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all DESCRIPTION properties.
<p class="example">while( $vjournal->deleteProperty( &quot;DESCRIPTION&quot; ))
  continue;</p>
<h5>Get DESCRIPTION</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;DESCRIPTION&quot; )</p>
<p class="comment">output = descriptionValue<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;DESCRIPTION&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; descriptionValue<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$description = $vevent->getProperty( &quot;description&quot; );</p>
<h5>Set DESCRIPTION</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;description&quot;, descriptionValue [, params [, propOrderNo ]] )</p>
<p class="comment">descriptionValue<span class="ref">1</span> = Value type TEXT
params<span class="ref">2</span>           = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
                         [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
                         [, xparam] )
xparam           = *[ xparamkey =&gt; xparamvalue ]
propOrderNo      = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;description&quot;, &quot;This is a description&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="DTEND"></a><h3>3.2.15 DTEND</h3>
This property specifies the date and time that a <i>calendar</i> component ends.
The property is OPTIONAL and MUST NOT occur more than once in VFREEBUSY and VEVENT. In VEVENT, it only occurs
if DURATION NOT occurs.
<br><br>
The default value type for DTEND is DATE-TIME, can be set to a DATE value type.
<br><br>
Notice that an end date without a time is in effect midnight of the day before the date, so for timeless dates, use the date following the event date for it to be correct. For an &quot;all-day event&quot; and using timeless dates, the DTEND is equal DTSTART plus one day, example all-day event (2007-12-01)<br>DTSTART;VALUE=DATE:20071201<br> DTEND;VALUE=DATE:20071202.
<h5>Delete DTEND</h5>
Remove DTEND from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;DTEND&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;DTEND&quot; );</p>
<h5>Get DTEND</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;DTEND&quot; )</p>
<p class="comment">output = dtendDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;DTEND&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; dtendDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$dtend = $vevent->getProperty( &quot;dtend&quot; );</p>
<h5>Set DTEND</h5>
Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
(in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
<br>
<br>
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
date-time values will be set WITH timezone from config. Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime from a time zone to another.
<br>
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;dtend&quot;, dtendDate [, params<span class="ref">2</span> ] )
<p class="comment">dtendDate<span class="ref">1</span>    = array ( &quot;year&quot;  =&gt; int year
                      , &quot;month&quot; =&gt; int month
                      , &quot;day&quot;   =&gt; int day
                     [, &quot;hour&quot;  =&gt; int hour
                      , &quot;min&quot;   =&gt; int min
                      , &quot;sec&quot;   =&gt; int sec
                     [, &quot;tz&quot;    =&gt; mixed tz ]] )
dtendDate     = int year
              , int month
              , int day
             [, int hour
              , int min
              , int sec
             [, mixed tz ]]
dtendDate     = array( int year
                     , int month
                     , int day
                    [, int hour
                     , int min
                     , int sec
                    [, mixed tz ]] )
dtendDate     = array( &quot;timestamp&quot; =&gt; int timestamp [,&quot;tz&quot; =&gt; mixed tz])
dtendDate     = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
dtendDate     : Within the "VFREEBUSY" <i>calendar</i> component,
                the time MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> time format.
tz            = &lt;timezone  identifier&gt; / UTC offset
                (timezone will be used as tzidparam (below), if tzidparam not set)
offset        = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
params<span class="ref">2</span>       = array([ tzidparam/datetimeparam/dateparam ] *[,xparams])
tzidparam     = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
                  // <span class="ref">output as local date-time with timezone identifier</span>
datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
dateparam     = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, ex. all-day event</span>
xparams       = xparamkey =&gt; xparamvalue</p>
<p class="label">Example 1</p>
<p class="example">$vevent->setProperty( &quot;dtend&quot;
                    , 2006, 8, 11, 16, 30, 0 );
  <span class="ref">// 11 august 2006 16.30.00 local date</span></p>
<p class="label">Example 2</p>
<p class="example">$vfreebusy->setProperty( &quot;dtend&quot;
                       , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
  <span class="ref">// 11 august 2006 16.30.00 -040000 :
     local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
<p class="label">Example 3</p>
<p class="example">$vevent->setProperty( &quot;dtend&quot;
                    , array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 )
                    , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
  <span class="ref">// end of one or more all-day events</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="DTSTAMP"></a><h3>3.2.16 DTSTAMP</h3>
The property indicates the date/time that the instance of the iCalendar object was created and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components. However, DTSTAMP is <b>AUTOMATICALLY</b> GENERATED in iCalcreator.
<br><br>
DTSTAMP may be required when importing iCal files into some calendaring software<br>(MS etc.),
as well as (<i>calendar</i>) <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and<br>"X-WR-TIMEZONE",
<a href="#METHOD">METHOD</a> property (value PUBLISH etc.) and the (also created) <a href="#UID">UID</a> property.
<br><br>
The value type for DTSTAMP is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
<h5>Delete DTSTAMP</h5>
If DTSTAMP if removed from a component, DTSTAMP will automatically be recreated when calendar output functions like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a> is executed.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;DTSTAMP&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;DTSTAMP&quot; );</p>
<h5>Get DTSTAMP</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;DTSTAMP&quot; )</p>
<p class="comment">output = dtstampDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;DTSTAMP&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; dtstampDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$dtstamp = $vevent->getProperty( &quot;dtstamp&quot; );</p>
<h5>Set DTSTAMP</h5>
Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
Notice, use function <a href="#transformDateTime">transformDateTime</a> to change a datetime To UTC.
<p class="label">Format</p>
<p class="format">setProperty( &quot;dtstamp&quot;, dtstampDate [, xparam ] )</p>
<p class="comment">dtstampDate<span class="ref">1</span> = array( &quot;year&quot;  =&gt; int year
                      , &quot;month&quot; =&gt; int month
                      , &quot;day&quot;   =&gt; int day
                     [, &quot;hour&quot;  =&gt; int hour
                      , &quot;min&quot;   =&gt; int min
                      , &quot;sec&quot;   =&gt; int sec
                      , &quot;tz&quot;    =&gt; offset ]] )
dtstampDate  = int year
             , int month
             , int day
            [, int hour
             , int min
             , int sec ]
dtstampDate  = array( int year
                    , int month
                    , int day
                   [, int hour
                    , int min
                    , int sec
                   [, offset ]] )
dtstampDate  = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset ])
dtstampDate  = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
offset       = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
xparam<span class="ref">2</span>      = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
.. .
$vtodo->setProperty( &quot;dstamp&quot;
                    , 2006, 8, 11, 7, 30, 1 );
  <span class="ref">// 11 august 2006 07.30.01 UTC</span></p>
<p class="label">Example 2</p>
<p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
              &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
  // <span class="ref">local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
$vtodo->setProperty( &quot;dtstamp&quot;, $date );
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="DTSTART"></a><h3>3.2.17 DTSTART</h3>
This property specifies when the <i>calendar</i> component begins.<br>
The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br>
The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br><br>
The default value type for DTSTART is DATE-TIME, can be set to a DATE value type.<br><br>
For an &quot;all-day event&quot; and using timeless dates, example (2007-12-01)<br>
DTSTART;VALUE=DATE:20071201<br>
DTEND;VALUE=DATE:20071202. // <span class="ref">opt., in effect midnight of the day <u>before</u> the date!!</span>
<h5>Delete DTSTART</h5>
Remove DTSTART from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;DTSTART&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;DTSTART&quot; );</p>
<h5>Get DTSTART</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;DTSTART&quot; )</p>
<p class="comment">output = dtstartDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;DTSTART&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; dtstartDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$dtstart = $vevent->getProperty( &quot;dtstart&quot; );</p>
<h5>Set DTSTART</h5>
Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
<br>
<br>
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
date-time values will be set WITH timezone from config. Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime from a time zones to another.
<br>
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;dtstart&quot;, dtstartDate [, params ] )</p>
<p class="comment">dtstartDate<span class="ref">1</span>  = array( &quot;year&quot;  =&gt; int year
                     , &quot;month&quot; =&gt; int month
                     , &quot;day&quot;   =&gt; int day
                    [, &quot;hour&quot;  =&gt; int hour
                     , &quot;min&quot;   =&gt; int min
                     , &quot;sec&quot;   =&gt; int sec
                    [, &quot;tz&quot;    =&gt; mixed tz ]] )
dtstartDate   = int year
              , int month
              , int day
             [, int hour
              , int min
              , int sec
             [, mixed tz ]]
dtstartDate   = array( int year
                     , int month
                     , int day
                    [, int hour
                     , int min
                     , int sec
                    [, mixed tz ]] )
dtstartDate   = array(&quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
dtstartDate   = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
dtstartDate : Within the "VFREEBUSY" <i>calendar</i> component,
              the dtstartDate MUST be specified in the <a href="#DATE_WITH_UTC_TIME">UTC</a> time format.
tz            = &lt;timezone identifier&gt; / offset
                (timezone will be used as tzidparam (below), if tzidparam not set)
offset        = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
params<span class="ref">2</span>       = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
tzidparam     = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
                // <span class="ref">output as local date-time with timezone identifier</span>
datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
dateparam     = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, ex. all-day event</span>
xparams       = xparamkey =&gt; xparamvalue</p>
<p class="label">Example 1</p>
<p class="example">$vevent->setProperty( &quot;dstart&quot;
                    , 2006, 8, 11, 7, 30, 1 );
  <span class="comment">// 11 august 2006 07.30.01 local date</span></p>
<p class="label">Example 2</p>
<p class="example">$vevent->setProperty( &quot;dstart&quot;
                    , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
  <span class="comment">// 11 august 2006 16.30.00 -040000,
  // local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span></p>
<p class="label">Example 3</p>
<p class="example">$vevent->setProperty( &quot;dtstart&quot;
                    , array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 )
                    , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
  <span class="comment">// start of an all-day event, or a period of (entire) days</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="DUE"></a><h3>3.2.18 DUE</h3>
This property defines the date and time when a <a href="#VTODO">VTODO</a> is expected to be completed
and is OPTIONAL and MUST NOT occur more than once and only if DURATION NOT occurs.<br><br>
The default value type for DUE is DATE-TIME, can be set to a DATE value type.
<h5>Delete DUE</h5>
Remove DUE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;DUE&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtodo->deleteProperty( &quot;DUE&quot; );</p>
<h5>Get DUE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;DUE&quot; )</p>
<p class="comment">output = dueDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;DUE&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; dueDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$due = $vtodo->getProperty( &quot;due&quot; );</p>
<h5>Set DUE</h5>
Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set
(in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
<br>
<br>
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
date-time values will be set WITH timezone from config. Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime from a time zone to another.
<br>
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;due&quot;, dueDate [, params ] )</p>
<p class="comment">dueDate<span class="ref">1</span>      = array( &quot;year&quot;   =&gt; int year
                     , &quot;month&quot; =&gt; int month
                     , &quot;day&quot;   =&gt; int day
                    [, &quot;hour&quot;  =&gt; int hour
                     , &quot;min&quot;   =&gt; int min
                     , &quot;sec&quot;   =&gt; int sec
                    [, &quot;tz&quot;    =&gt; mixed tz ]] )
dueDate       = int year
              , int month
              , int day
             [, int hour
              , int min
              , int sec
             [, mixed tz ]]
dueDate       = array( int year
                     , int month
                     , int day
                    [, int hour
                     , int min
                     , int sec
                    [, mixed tz ]] )
dueDate       = array( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
dueDate       = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
tz            = &lt;timezone identifier&gt; / offset
                (timezone will be used as tzidparam (below), if tzidparam not set)
offset        = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
params<span class="ref">2</span>       = array([ tzidparam/datetimeparam/dateparam ] *[, xparams])
tzidparam     = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
                 // <span class="ref">output as local date-time with timezone identifier</span>
datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
dateparam     = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE, &quot;during the day&quot;</span>
xparams       = xparamkey =&gt; xparamvalue</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->setProperty( &quot;due&quot;
                   , 2006, 8, 11, 18, 0, 0 );
  <span class="comment">// 11 august 2005 18.00.00 local date</span></p>
<p class="label">Example 2</p>
<p class="example">$vtodo->setProperty( &quot;due&quot;
                   , 2006, 8, 11, 16, 30, 0, &quot;-040000&quot; );
  <span class="comment">// 11 august 2006 16.30.00 -040000
  // local date + UTC offset sets <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span></p>
<p class="label">Example 3</p>
<p class="example">$vtodo->setProperty( &quot;due&quot;
                    , array( &quot;year&quot; =&gt;, 2006, &quot;month&quot; =&gt; 8, &quot;day&quot;=&gt; 11 )
                    , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
  <span class="comment">// due &quot;during the day&quot;</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="DURATION"></a><h3>3.2.19 DURATION</h3>
The property specifies a positive duration of time<br>
In a VEVENT it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DTEND. If one occurs, so MUST NOT the other.<br>
In a VTODO it is OPTIONAL and MUST NOT occur more than once and MUST NOT occur in pair with DUE. If one occurs, so MUST NOT the other.<br>
In a VFREEBUSY it is OPTIONAL and MUST NOT occur more than once.<br>
In a VALARM it is OPTIONAL and MUST NOT occur more than once and MUST occur in pair with TRIGGER. If one occurs, so MUST  the other.
<h5>Delete DURATION</h5>
Remove DURATION from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;DURATION&quot; )</p>
<p class="label">Example</p>
<p class="example">$valarm->deleteProperty( &quot;DURATION&quot; );</p>
<h5>Get DURATION</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;DURATION&quot; )</p>
<p class="comment">output = duration<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;DURATION&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; duration<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$duration = $vtodo->getProperty( &quot;duration&quot; );</p>
<p class="label">option</p>
If a 4th argument is used and set to TRUE, returned output is in a DATE-TIME
 output format (like <a href="#DTEND">DTEND</a> / <a href="#DUE">DUE</a>), based on
<a href="#DTSTART">DTSTART</a> value with added DURATION value.
<h5>Set DURATION</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;duration&quot;, duration [, xparam ] )</p>
<p class="comment">
duration<span class="ref">1</span>  = array ( &quot;week&quot; =&gt; int week )
duration<span class="ref">1</span>  = array ( &quot;day&quot; =&gt; int day )
                  [, &quot;hour&quot; =&gt; int hour
                   , &quot;min&quot; =&gt; int min
                   , &quot;sec&quot; =&gt; int sec ])
duration   = array ( &quot;sec&quot; =&gt; int sec )
duration   = array( int week/false
                 [, int day/false
                 [, int hour
                  , int min
                  , int sec ]] )
duration   = int week/false
          [, int day/false
          [, int hour
           , int min
           , int sec ]]
duration   = string dur-value = [&quot;+&quot;] &quot;P&quot; (dur-date/dur-time/dur-week)
dur-date   = dur-day [dur-time]
dur-time   = &quot;T&quot; (dur-hour / dur-minute / dur-second)
dur-week   = 1*DIGIT &quot;W&quot;
dur-hour   = 1*DIGIT &quot;H&quot; [dur-minute]
dur-minute = 1*DIGIT &quot;M&quot; [dur-second]
dur-second = 1*DIGIT &quot;S&quot;
dur-day    = 1*DIGIT &quot;D&quot;
xparam<span class="ref">2</span>     = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->setProperty &quot;duration&quot;
                   , array( &quot;day&quot; =&gt; 1 )); </p>
<p class="ref">// one day</p>
<p class="label">Example 2</p>
<p class="example">$vtodo->setProperty( &quot;duration&quot;
                   , &quot;PT4H&quot; );
<p class="ref"> // four hours</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="EXDATE"></a><h3>3.2.20 EXDATE</h3>
This property defines the list of date/time exceptions for a recurring <i>calendar</i> component and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
The default value type for EXDATE is DATE-TIME, can be set to a DATE value type.
<h5>Delete EXDATE</h5>
Remove EXDATE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;EXDATE&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->deleteProperty( &quot;EXDATE&quot; );</p>
<p class="label">Example 2</p>
Delete EXDATE property no 2.
<p class="example">$vjournal->deleteProperty( &quot;EXDATE&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all EXDATE properties.
<p class="example">while( $vjournal->deleteProperty( &quot;EXDATE&quot; ))
  continue;</p>
<h5>Get EXDATE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;EXDATE&quot; )<p>
<p class="comment">output = exdates<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;exdate&quot;, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; exdates<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparams<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;EXDATE&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo EXDATE</p>
<p class="label">Example</p>
<p class="example">$exdate = $vtodo->getProperty( &quot;exdate&quot; );</p>
<h5>Set EXDATE</h5>
Insert property value.<br>
If &quot;TZID&quot; is set in params, ex. &quot;TZID&quot; = &quot;CET&quot;,
all timezone or offset in dates are ignored and DATE-TIME value type is set.<br>
If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br>
If no &quot;VALUE&quot; parameter in params, DATE-TIME (default) value type is set.<br>
If empty params and offset in 1st date, all remaining dates are set to UTC.<br>
If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br>
If none of the above rules are applicable, DATE-TIME and local date is set default.<br>
Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime from a time zone to another.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;exdate&quot;, exdates [, xparams [, propOrderNo ]] )</p>
<p class="comment">exdates<span class="ref">1</span>      = array ( date *[, date ] )
date          = array( int year
                     , int month
                     , int day
                    [, int hour
                     , int min
                     , int sec
                    [, mixed tz ]] )
date<span class="ref">1</span>         = array( &quot;year&quot;  =&gt; int year
                     , &quot;month&quot; =&gt; int month
                     , &quot;day&quot;   =&gt; int day
                    [, &quot;hour&quot;  =&gt; int hour
                     , &quot;min&quot;   =&gt; int min
                     , &quot;sec&quot;   =&gt; int sec
                    [, &quot;tz&quot;    =&gt; mixed tz ]] )
date          = array( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; =&gt; mixed tz])
date          = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
tz            = &lt;timezone identifier&gt; / offset
                (timezone will be used as tzidparam (below), if tzidparam not set)
offset        = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
params<span class="ref">2</span>       = array([(datetimeparam/dateparam)&nbsp;/ tzidparam] [,xparam])
datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as date-time</span>
dateparam     = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
tzidparam     = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
xparams       = *[ xparamkey =&gt; xparamvalue ]
propOrderNo   = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example 1</p>
<p class="example">$vevent->setProperty( &quot;exdate&quot;
                    , array( array( 2006, 8, 14, 16, 0, 0 ));
  <span class="ref">// >exclude 2006-08-14 16.00.00 (local date) from recurrence pattern</span></p>
<p class="label">Example 2</p>
<p class="example">$vevent->setProperty( &quot;exdate&quot;
                    , array( array(&quot;year&quot; =&gt;,2006,&quot;month&quot; =&gt; 8,&quot;day&quot;=&gt; 11))
                    , array( &quot;VALUE&quot; =&gt; &quot;DATE&quot; ));
  <span class="ref">// exclude 2006-08-11 from recurrence pattern;</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="EXRULE"></a><h3>3.2.21 EXRULE</h3>
This property defines a rule or repeating pattern for an exception to a recurrence set and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.
<h5>Delete EXRULE</h5>
Remove EXRULE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;EXRULE&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->deleteProperty( &quot;EXRULE&quot; );</p>
<p class="label">Example 2</p>
Delete EXRULE property no 2.
<p class="example">$vjournal->deleteProperty( &quot;EXRULE&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all EXRULE properties.
<p class="example">while( $vjournal->deleteProperty( &quot;EXRULE&quot; ))
  continue;</p>
<h5>Get EXRULE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;EXRULE&quot; )</p>
<p class="comment">output = recur<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;exrule&quot;, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; recur<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;EXRULE&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo EXRULE</p>
<p class="label">Example</p>
<p class="example">$exrule = $vtodo->getProperty( &quot;exrule&quot; );</p>
<h5>Set EXRULE</h5>
Insert property value.<br>
Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime to UTC time zone.<br>
Parameters, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;exrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
<p class="comment">recur<span class="ref">1</span>      = array( "FREQ"=&gt;freq
     // <span class="ref">either UNTIL or COUNT may appear in a &quot;recur&quot;,
        but UNTIL and COUNT MUST NOT occur in the same &quot;recur&quot;</span>
                  [, &quot;UNTIL&quot; &quot;=&gt;&quot; >enddate ]
                  [, &quot;COUNT&quot; &quot;=&gt;&quot; 1*DIGIT ]
     // <span class="ref">the rest of these keywords are optional,
        but MUST NOT occur more than once</span>
                  [, &quot;INTERVAL&quot;   &quot;=&gt;&quot; 1*DIGIT ]
                  [, &quot;BYSECOND&quot;   &quot;=&gt;&quot; byseclist ]
                  [, &quot;BYMINUTE&quot;   &quot;=&gt;&quot; byminlist ]
                  [, &quot;BYHOUR&quot;     &quot;=&gt;&quot; byhrlist ]
                  [, &quot;BYDAY&quot;      &quot;=&gt;&quot; bywdaylist ]
                  [, &quot;BYMONTHDAY&quot; &quot;=&gt;&quot; bymodaylist ]
                  [, &quot;BYYEARDAY&quot;  &quot;=&gt;&quot; byyrdaylist ]
                  [, &quot;BYWEEKNO&quot;   &quot;=&gt;&quot; bywknolist ]
                  [, &quot;BYMONTH&quot;    &quot;=&gt;&quot; bymolist ]
                  [, &quot;BYSETPOS&quot;   &quot;=&gt;&quot; bysplist ]
                  [, &quot;WKST&quot;       &quot;=&gt;&quot; weekday ]
                  [, x-name       &quot;=&gt;&quot; text ] )
freq        = &quot;SECONDLY&quot; /
              &quot;MINUTELY&quot; /
              &quot;HOURLY&quot;   /
              &quot;DAILY&quot;    /
              &quot;WEEKLY&quot;   /
              &quot;MONTHLY&quot;  /
              &quot;YEARLY&quot;
enddate     = date
enddate     = / date-time ;An <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME value
byseclist   = seconds
byseclist   = array(seconds *(, seconds ))
seconds     = 1DIGIT / 2DIGIT ;0 to 59
byminlist   = minutes
byminlist   = array( minutes *(, minutes ))
minutes     = 1DIGIT / 2DIGIT ;0 to 59
byhrlist    = hour
byhrlist    = array( hour *(, hour ))
hour        = 1DIGIT / 2DIGIT ;0 to 23
bywdaylist  = weekdaynum
bywdaylist  = array( weekdaynum *("," weekdaynum ))
weekdaynum  = array( [([plus] ordwk / minus ordwk)], &quot;DAY&quot; =&gt; weekday )
plus        = &quot;+&quot;
minus       = &quot;-&quot;
ordwk       = 1DIGIT / 2DIGIT ;1 to 53
weekday     = &quot;SU&quot; / &quot;MO&quot; / &quot;TU&quot; / &quot;WE&quot; / &quot;TH&quot; / &quot;FR&quot; / &quot;SA&quot;
                ; Corresponding to
                ; SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
                ; FRIDAY, SATURDAY and SUNDAY days of the week.
bymodaylist = monthdaynum
bymodaylist = array( monthdaynum *(, monthdaynum ))
monthdaynum = ( [plus] ordmoday ) / ( minus ordmoday )
ordmoday    = 1DIGIT / 2DIGIT ;1 to 31
byyrdaylist = yeardaynum
byyrdaylist = array( yeardaynum *(, yeardaynum ))
yeardaynum  = ( [plus] ordyrday ) / ( minus ordyrday )
ordyrday    = 1DIGIT / 2DIGIT / 3DIGIT ;1 to 366
bywknolist  = weeknum
bywknolist  = array( weeknum *(, weeknum ))
weeknum     = ( [plus] ordwk ) / ( minus ordwk )
bymolist    = monthnum
bymolist    = array( monthnum *(, monthnum ))
monthnum    = 1DIGIT / 2DIGIT ;1 to 12
bysplist    = setposday
bysplist    = array( setposday *(, setposday ))
setposday   = yeardaynum</p>
<p class="comment">
xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty(&nbsp;&quot;Exrule&quot;
             ,&nbsp;array( &quot;FREQ&quot;       =&gt; &quot;MONTHLY&quot;
                    , &quot;UNTIL&quot;      =&gt; &quot;20060831&quot;
   // <span class="ref">DATE / DATE-TIME in <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> format; string/array, see <a href="#CREATED">CREATED</a> format</span>
                    , &quot;INTERVAL&quot;   =&gt; 2
                    , &quot;WKST&quot;       =&gt; &quot;SU&quot;
                    , &quot;BYSECOND&quot;   =&gt; 2
                    , &quot;BYMINUTE&quot;   =&gt; array( 2, -4, 6 ) // (*)
                    , &quot;BYHOUR&quot;     =&gt; array( 2, 4, -6 ) // (*)
                    , &quot;BYMONTHDAY&quot; =&gt; -2                // (*)
                    , &quot;BYYEARDAY&quot;  =&gt; 2                 // (*)
                    , &quot;BYWEEKNO&quot;   =&gt; array( 2, -4, 6 ) // (*)
                    , &quot;BYMONTH&quot;    =&gt; 2                 // (*)
                    , &quot;BYSETPOS&quot;   =&gt; array( 2, -4, 6 ) // (*)
                    , &quot;BYday&quot;      =&gt; array( array(-2, &quot;DAY&quot; =&gt; &quot;WE&quot; )
                                           , array( 3, &quot;DAY&quot; =&gt; &quot;TH&quot;)
                                           , array( 5, &quot;DAY&quot; =&gt; &quot;FR&quot;)
                                           , array(    &quot;DAY&quot; =&gt; &quot;MO&quot;))
                                                        // (**)
                    , &quot;X-NAME&quot;     =&gt; &quot;x-value&quot; )
            , array( &quot;xparamkey&quot;   =&gt; &quot;xparamValue&quot; ));

$vtodo->setProperty( >&quot;exrule&quot;
            , array( &quot;FREQ&quot;        =&gt; &quot;WEEKLY&quot;
                   , &quot;COUNT&quot;       =&gt; 2
                   , &quot;INTERVAL&quot;    =&gt; 2
                   , &quot;WKST&quot;        =&gt; &quot;SU&quot;
                   , &quot;BYSECOND&quot;    =&gt; array( -2, 4, 6 ) // (*)
                   , &quot;BYMINUTE&quot;    =&gt; -2                // (*)
                   , &quot;BYHOUR&quot;      =&gt; 2                 // (*)
                   , &quot;BYMONTHDAY&quot;  =&gt; array( 2, -4, 6 ) // (*)
                   , &quot;BYYEARDAY&quot;   =&gt; array( -2, 4, 6 ) // (*)
                   , &quot;BYWEEKNO&quot;    =&gt; -2                // (*)
                   , &quot;BYMONTH&quot;     =&gt; array( 2, 4, -6 ) // (*)
                   , &quot;BYSETPOS&quot;    =&gt; -2                // (*)
                   , &quot;BYday&quot;       =&gt; array( 5, &quot;DAY&quot; =&gt; &quot;WE&quot; )
                                                        // (**)
                   , &quot;X-NAME&quot;      =&gt; &quot;x-value&quot;  )
            , array( &quot;xparamkey&quot;   =&gt; &quot;xparamValue&quot; ));
  //<span class="ref">(*)  single value/array of values</span>
  //<span class="ref">(**) single value array /array of arrays</span>
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="FREEBUSY_PROP"></a><h3>3.2.22 FREEBUSY</h3>
The property defines one or more free or busy time intervals in a <a href="#VFREEBUSY">VFREEBUSY</a> <i>calendar</i> component.<br><br>
The value type for FREEBUSY is PERIOD. A PERIOD is a DATE-TIME/DATE-TIME or a DATE-TIME/duration.
<h5>Delete FREEBUSY</h5>
Remove FREEBUSY from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;FREEBUSY&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vfreebusy->deleteProperty( &quot;FREEBUSY&quot; );</p>
<p class="label">Example 2</p>
Delete FREEBUSY property no 2.
<p class="example">$vfreebusy->deleteProperty( &quot;FREEBUSY&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all FREEBUSY properties.
<p class="example">while( $vfreebusy->deleteProperty( &quot;FREEBUSY&quot; ))
  continue;</p>
<h5>Get FREEBUSY</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;FREEBUSY&quot; )</p>
<p class="comment">output = array( &quot;fbtyp&quot; =&gt; freebusytype<span class="ref">1</span> , periods<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;FREEBUSY&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot; =&gt; array(&quot;fbtype&quot; =&gt; freebusytype<span class="ref">1</span> ,periods<span class="ref">2</span>)
              , &quot;params&quot; =&gt; xparams<span class="ref"> 3</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;FREEBUSY&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo FREEBUSY</p>
<p class="label">Example</p>
<p class="example">$freebusy = $vfreebusy->getProperty( &quot;FREEBUSY&quot; );</p>
<h5>Set FREEBUSY</h5>
Insert property value. A FREEBUSY input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
<p class="label">Format</p>
<p class="format">setProperty( &quot;freebusy&quot;,freebusytype,fbperiods [,xparams [,propOrderNo ]] )</p>
<p class="comment">freebusytype<span class="ref">1</span>     = one of &quot;FREE&quot;
                        / &quot;BUSY&quot; <b>Default</b>
                        / &quot;BUSY-UNAVAILABLE&quot;
                        / &quot;BUSY-TENTATIVE&quot;
                        /  x-name
fbperiods         = array( periods<span class="ref">2</span> )&nbsp;
periods<span class="ref">2</span>           = array( startdate, enddate/duration )
                 *[, array( startdate, enddate/duration )]
startdate/enddate = array( int year
                         , int month
                         , int day
                         , int int hour
                         , int min
                         , int day )
startdate/enddate = array( &quot;year&quot;  =&gt; int year
                         , &quot;month&quot; =&gt; int month
                         , &quot;day&quot;   =&gt; int day
                         , &quot;hour&quot;  =&gt; int hour
                         , &quot;min&quot;   =&gt; int min
                         , &quot;sec&quot;   =&gt; int sec ) // <span class="ref">output format</span>
startdate/enddate = array( &quot;timestamp&quot; =&gt; int timestamp )
startdate/enddate = string datestring // <span class="ref">string date,
                                        acceptable by strtotime function,
                                        ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                        (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
startdate/enddate : date and time values MUST be an <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
duration          = array( int week/false
                        [, int day/false
                         , int hour
                         , int min
                         , int sec] )
duration          = array( &quot;week&quot; =&gt; int week/false
                        [, &quot;day&quot;  =&gt; int day/false
                        [, &quot;hour&quot; =&gt; int hour
                         , &quot;min&quot;  =&gt; int min
                         , &quot;sec&quot;  =&gt; int sec ]] ); // <span class="ref">output format</span>
duration          = array( &quot;sec&quot;  =&gt; int sec )
duration          = string dur-value
                        = ([&quot;+&quot;]/&quot;-&quot;) &quot;P&quot; (dur-date/dur-time/dur-week)
dur-date          = dur-day [dur-time]
dur-time          = &quot;T&quot; (dur-hour / dur-minute / dur-second)
dur-week          = 1*DIGIT &quot;W&quot;
dur-hour          = 1*DIGIT &quot;H&quot; [dur-minute]
dur-minute        = 1*DIGIT &quot;M&quot; [dur-second]
dur-second        = 1*DIGIT &quot;S&quot;
dur-day           = 1*DIGIT &quot;D&quot;
xparams<span class="ref">3</span>          = array( *[ xparamkey =&gt; xparamvalue ] )
propOrderNo       = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
<p class="example">$fdate1 = array ( 2001, 1, 1, 1, 1, 1 );
alt.
$fdate1 = array ( &quot;year&quot;  =&gt; 2001
                , &quot;month&quot; =&gt; 1
                , &quot;day&quot;   =&gt; 1
                , &quot;hour&quot;  =&gt; 1
                , &quot;min&quot;   =&gt; 1
                , &quot;sec&quot;   =&gt; 1 );
$fdate2 = array ( 2002, 2, 2, 2, 2, 2 );
$fdate3 = array ( 2003, 3, 3, 3, 3, 3 );
$fdate4 = &quot;4 April 2005 4:4:4&quot;;
$fdate7 = array ( &quot;year&quot;  =&gt; 2007
                , &quot;month&quot; =&gt; 7
                , &quot;day&quot;   =&gt; 7 );
$fdur6  = array ( &quot;week&quot; =&gt; 0
                , &quot;day&quot;  =&gt; 5
                , &quot;hour&quot; =&gt; 5
                , &quot;min&quot;  =&gt; 5
                , &quot;sec&quot;  =&gt; 5 );
$fdur7  = array ( 0, 0, 6 );             // <span class="ref">duration for 6 hours</span>
$fdur8  = &quot;P2D&quot;; // <span class="ref">duration two days</span>
$freebusy->setProperty &quot;freebusy&quot;
                      , &quot;FREE&quot;
                      , array( array( $fdate1, $fdate2 )
                             , array( $fdate3, $fdur6 )
                             , array( $fdate4, $fdate5 )));
$freebusy->setProperty(&quot;freebusy&quot;
                      , &quot;Busy&quot;
                      , array( array( array( $fdate1, $fdate2 )
                             , array( $fdate3, $fdur8 )
                             , array( $fdate4, $fdur7 )
                             , array( $fdate1, $fdate3 )));</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="GEO"></a><h3>3.2.23 GEO</h3>
This property specifies information related to the global position for the activity specified by VEVENT and VTODO components and is OPTIONAL and MUST NOT occur more than once.
<br><br>
Value type for latitude and longitude is FLOAT. &quot;Values for latitude and longitude shall be expressed as decimal fractions of degrees. Whole degrees of latitude shall be represented by a two-digit decimal number ranging from 0 through 90. Whole degrees of longitude shall be represented by a decimal number ranging from 0 through 180. When a decimal fraction of a degree is specified, it shall be separated from the whole number of degrees by a decimal point.&quot;
<h5>Delete GEO</h5>
Remove GEO from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;GEO&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;GEO&quot; );</p>
<h5>Get GEO</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;GEO&quot; )</p>
<p class="comment">output = array( &quot;latitude&quot;  =&gt; &lt;latitude&gt;
              , &quot;longitude&quot; =&gt; &lt;longitude&gt;))</p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;GEO&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot; =&gt; array ( &quot;latitude&quot;  =&gt; &lt;latitude&gt;
                                 , &quot;longitude&quot; =&gt; &lt;longitude&gt;))
              , &quot;params&quot; =&gt; xparam <span class="ref">1</span> )</p>
<p class="label">Example</p>
<p class="example">$geo = $vevent->getProperty( &quot;GEO&quot; );</p>
<h5>Set GEO</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;geo&quot;, float latitude, float longitude [, xparam ] )</p>
<p class="comment">xparam <span class="ref">1</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;geo&quot;, 11.23456, -23.45678 );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="LAST-MODIFIED"></a><h3>3.2.24 LAST-MODIFIED</h3>
The property specifies the date and time that the information associated with the <i>calendar</i> component was last revised in the <i>calendar</i> store. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>,  <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VTIMEZONE">VTIMEZONE</a> components.<br><br>
The value type for LAST-MODIFIED is <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
<h5>Delete LAST-MODIFIED</h5>
Remove LAST-MODIFIED from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;LAST-MODIFIED&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;LAST-MODIFIED&quot; );</p>
<h5>Get LAST-MODIFIED</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;LAST-MODIFIED&quot; )</p>
<p class="comment">output = moddate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;LAST-MODIFIED&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; moddate<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$lastMod = $vevent->getProperty( &quot;LAST-MODIFIED&quot; );</p>
<h5>Set LAST-MODIFIED</h5>
Insert property value. Input date is always a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME or,
if &quot;offset&quot; parameter is used, converted to a <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME.
Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime to UTC time zone.
<p class="label">Format</p>
<p class="format">setProperty( &quot;Last-Modified&quot; [, moddate [, xparam ]] )</p>
<p class="comment">moddate<span class="ref">1</span>       = array( &quot;year&quot;  =&gt; int year
                      , &quot;month&quot; =&gt; int month
                      , &quot;day&quot;   =&gt; int day
                     [, &quot;hour&quot;  =&gt; int hour
                      , &quot;min&quot;   =&gt; int min
                      , &quot;sec&quot;   =&gt; int sec
                      , &quot;tz&quot;    =&gt; offset ]] )
completedDate  = int year
               , int month
               , int day
              [, int hour
               , int min
               , int sec ]
completedDate  = array( int year
                      , int month
                      , int day
                      [, int hour
                      , int min
                      , int sec
                     [, offset ]] )
completedDate  = array ( &quot;timestamp&quot; =&gt; int timestamp [, &quot;tz&quot; => offset])
completedDate  = string datestring // <span class="ref">string date,
                                     acceptable by strtotime function,
                                     ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
                                     (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
offset         = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
xparam<span class="ref">2</span>        = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtodo = &amp; $vcalendar->newComponent( &quot;vtodo&quot; );
.. .
$vtodo->setProperty(&quot;last-modified&quot;
                    , 2006, 8, 14, 12, 1, 2 );
  <span class="ref">// 14 august 2006 12.01.02 UTC</span></p>
<p class="label">Example 2</p>
<p class="example">$date = array(&quot;year&quot; =&gt; 2006, &quot;month&quot; =&gt; 10, &quot;day&quot; =&gt; 10,
              &quot;hour&quot; =&gt; 10, &quot;min&quot; =&gt; 0, &quot;sec&quot; =&gt; 0, &quot;tz&quot; =&gt; &quot;+0200&quot;);
  <span class="ref">// local date + UTC offset =&gt; <a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
$vtodo->setProperty( &quot;last-modified&quot;, $date );
.. .</p>
<p class="label">Example 3</p>
<p class="example">$vevent->setProperty( &quot;last-modified&quot; );
  <span class="ref">// current UTC DATE-TIME is set if called without parameters</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="LOCATION"></a><h3>3.2.25 LOCATION</h3>
The property defines the intended venue for the activity defined by a <i>calendar</i> component. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.
<br><br>
The value type for LOCATION is TEXT.
<h5>Delete LOCATION</h5>
Remove LOCATION from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;LOCATION&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;LOCATION&quot; );</p>
<h5>Get LOCATION</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;LOCATION&quot; )</p>
<p class="comment">output = location<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;LOCATION&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; location<span class="ref">1</span>
              , &quot;params&quot; =&gt; param<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$location = $vevent->getProperty( &quot;LOCATION&quot; );</p>
<h5>Set LOCATION</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;location&quot;, string location [, array param] )</p>
<p class="comment">location<span class="ref">1</span> = Value type TEXT
params<span class="ref">2</span>   = array( [&quot;ALTREP&quot; =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
                  [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
                  [, xparam ]
xparam    = *[ xparamkey =&gt; xparamvalue ]</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;location&quot;, &quot;Buckingham Palace&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="ORGANIZER"></a><h3>3.2.26 ORGANIZER</h3>
The property defines the organizer for a <i>calendar</i> component and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br><br>
This value type for ORGANIZER is URI, a <i>calendar</i> user address.
<h5>Delete ORGANIZER</h5>
Remove ORGANIZER from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;ORGANIZER&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;ORGANIZER&quot; );</p>
<h5>Get ORGANIZER</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;ORGANIZER&quot; )</p>
<p class="comment">output = organizer<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;ORGANIZER&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; organizer<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$organizer = $vevent->getProperty( &quot;ORGANIZER&quot; );</p>
<h5>Set ORGANIZER</h5>
Insert property value.
Property value must be prefixed by protocol (ftp://, http://,mailto:, file://.. . ref. rfc 1738 ).
Also DIR parameter must be prefixed by protocol.
SENT-BY parameter must use protocol &quot;mailto:&quot;, prefixed if missing.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;organizer&quot;, organizer [, params] )</p>
<p class="comment">organizer<span class="ref">1</span> = a <i>calendar</i> user address, a URI as defined by [RFC
             1738] or any other IANA registered form for a URI.
params<span class="ref">2</span>    = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;
                           (applies to the CN parameter value) ]
                 [, &quot;CN&quot;       =&gt; &quot;common name to be associated
                                   with the <i>calendar</i> user
                                   specified by the property&quot;]
                 [, &quot;DIR&quot;      =&gt; &quot;reference to a directory
                         entry associated with the <i>calendar</i> user
                                   specified by the property&quot; ]
                 [, &quot;SENT-BY&quot;  =&gt; &quot;single <i>calendar</i> user
                                   that is acting on behalf
                                   of the <i>calendar</i> user
                                   specified by the property&quot; ]
                 [, xparam ]
xparam     = *[ xparamkey =&gt; xparamvalue ]</p>
<p class="label">Example</p>
<p class="example">
$dir = &quot;ldap://domain.com:6666/o=3DDC%20Comp,c=3DUS??(cn=3DJohn%20Doe)&quot;;
$vevent-&gt;setProperty( &quot;organizer&quot;
                    , &quot;ical@domain.com&quot;
                    , array( &quot;CN&quot;      =&gt; &quot;John Doe&quot;
                           , &quot;DIR&quot;     =&gt; $dir
                           , &quot;SENT-BY&quot; =&gt; &quot;secretary@domain.com&quot;
                           , &quot;X-Key1&quot;  =&gt; &quot;X-Value1&quot;
                           , &quot;X-Key2&quot;  =&gt; &quot;X-Value2&quot; ));</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="PERCENT-COMPLETE"></a><h3>3.2.27 PERCENT-COMPLETE</h3>
This property is used by an assignee or delegatee of a <a href="#VTODO">VTODO</a> to convey the percent completion of a <a href="#VTODO">VTODO</a> to the Organizer and is OPTIONAL and MUST NOT occur more than once.<br><br>
The property value is a positive integer between zero and one hundred. A value of "0" indicates the <a href="#VTODO">VTODO</a> has not yet been started. A value of "100" indicates that the <a href="#VTODO">VTODO</a> has been completed. Integer values in between indicate the percent partially complete.
<h5>Delete PERCENT-COMPLETE</h5>
Remove PERCENT-COMPLETE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;PERCENT-COMPLETE&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtodo->deleteProperty( &quot;PERCENT-COMPLETE&quot; );</p>
<h5>Get PERCENT-COMPLETE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;PERCENT-COMPLETE&quot; )</p>
<p class="comment">output = percent<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;PRIORITY&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; percent<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$percent = $vtodo->getProperty( &quot;PERCENT-COMPLETE&quot; );</p>
<h5>Set PERCENT-COMPLETE</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;Percent-Complete&quot;, percent [, xparam ] )</p>
<p class="comment">percent<span class="ref">1</span> = Value type INTEGER
xparam<span class="ref">2</span>  = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vtodo->setProperty( &quot;percent-complete&quot;, 90 );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="PRIORITY"></a><h3>3.2.28 PRIORITY</h3>
The property defines the relative priority for a <i>calendar</i> component and is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.<br><br>
The priority is specified as an integer in the range zero to nine.<br>
A value of zero (US-ASCII decimal 48) specifies an undefined priority.<br>
A value of one (US-ASCII decimal 49) is the highest priority.<br>
A value of two (US-ASCII decimal 50) is the second highest priority.<br>
Subsequent numbers specify a decreasing ordinal priority.<br>
A value of nine (US-ASCII decimal 58) is the lowest priority.
<h5>Delete PRIORITY</h5>
Remove PRIORITY from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;PRIORITY&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;PRIORITY&quot; );</p>
<h5>Get PRIORITY</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;PRIORITY&quot; )</p>
<p class="comment">output = priority<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;PRIORITY&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; priority<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$priority = $vevent->getProperty( &quot;priority&quot; );</p>
<h5>Set PRIORITY</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;priority&quot;, priority [, xparam ] )</p>
<p class="comment">priority<span class="ref">1</span> = Value type INTEGER
xparam<span class="ref">2</span>   = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;priority&quot;, 3 );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="RDATE"></a><h3>3.2.29 RDATE</h3>
This property defines the list of date/times for a recurrence set and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a>, <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.<br><br>
The default value type for RDATE is DATE-TIME, can be set to DATE or PERIOD (params <span class="ref">2</span>).
<h5>Delete RDATE</h5>
Remove RDATE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;RDATE&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->deleteProperty( &quot;RDATE&quot; );</p>
<p class="label">Example 2</p>
Delete RDATE property no 2.
<p class="example">$vjournal->deleteProperty( &quot;RDATE&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all RDATE properties.
<p class="example">while( $vjournal->deleteProperty( &quot;RDATE&quot; ))
  continue;</p>
<h5>Get RDATE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;RDATE&quot; )</p>
<p class="comment">output = dates<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;RDATE&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; dates<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;RDATE&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo RDATE</p>
<p class="label">Example</p>
<p class="example">$rdates = $vevent->getProperty( &quot;RDATE&quot; );</p>
<h5>Set RDATE</h5>
Insert property value.<br>
If &quot;TZID&quot; is set in params, ex. &quot;TZID&quot; = &quot;CET&quot;, all timezone or offset in dates are ignored and DATE-TIME value type is set.<br>
If DATE value type is set in params (&quot;VALUE&quot; = &quot;DATE&quot;), all timezone or offset in dates are ignored.<br>
If &quot;PERIOD&quot; is set in params (&quot;VALUE&quot; = &quot;PERIOD&quot;), DATE-TIME value type is set.<br>
If no &quot;VALUE&quot; parameter in params, DATE-TIME (default) value type is set.<br>
If empty params and offset in 1st date, all remaining dates are set to UTC.<br>
If no &quot;TZID&quot; is set in params and timezone in 1st date, all remaining dates are within this timezone and param &quot;TZID&quot; is set.<br>
If none of the above rules are applicable, DATE-TIME and local date is set default.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;rdate&quot;, dates [, params [, propOrderNo ]] )</p>
<p class="comment">dates<span class="ref">1</span>        = array ( date2 *[, date2 ] )
date2         = date
date2         = array( startdate, enddate/duration ) ]
startdate     = date
enddate       = date
date          = array( int year
                     , int month
                     , int day
                    [, int int hour
                     , int min
                     , int day
                     , mixed tz ] )
date          = array( &quot;year&quot;  =&gt; int year
                     , &quot;month&quot; =&gt; int month
                     , &quot;day&quot;   =&gt; int day
                    [, &quot;hour&quot;  =&gt; int hour
                     , &quot;min&quot;   =&gt; int min
                     , &quot;sec&quot;   =&gt; int sec
                    [, &quot;tz&quot;    =&gt; mixed tz ]] )
                     // <span class="ref">output format</span>
date          = array( &quot;timestamp&quot; =&gt; int timestamp
                     [, &quot;tz&quot;       =&gt; mixed tz ] )
date          = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
tz            = timezone / offset
                (timezone will be used as tzidparam, if tzidparam not exists)
offset        = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
duration      = array( int week/false
                    [, int day/false
                     , int hour
                     , int min
                     , int sec] )
duration      = array([  &quot;week&quot; =&gt; int week/false ,] /
                      [  &quot;day&quot;  =&gt; int day/false
                      [, &quot;hour&quot; =&gt; int hour
                       , &quot;min&quot;  =&gt; int min
                       , &quot;sec&quot;  =&gt; int sec ]] );
                     // <span class="ref">output format, only used keys</span>
duration      = array(   &quot;sec&quot;  =&gt; int sec );
duration      = string format duration like &quot;P15DT5H0M20S&quot;
params<span class="ref">2</span>       = ([tzidparam ( / datetimeparam / dateparam / periodparam )]
                        *[, xparams ] )
tzidparam     = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
                 // <span class="ref">output as local DATE-TIME with timezone identifier</span>
datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as DATE-TIME</span>
dateparam     = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
periodparam   = &quot;VALUE&quot; =&gt; &quot;PERIOD&quot; // <span class="ref">output as PERIOD (datetime)</span>
xparams       = xparamkey =&gt; xparamvalue
propOrderNo   = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
See rules in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).<br>
<p class="example">// $rdate1 = array ( 2001, 1, 1, 1, 1, 1 );
// alt.
$rdate1 = array( &quot;year&quot;  =&gt; 2001
               , &quot;month&quot; =&gt; 1
               , &quot;day&quot;   =&gt; 1
               , &quot;hour&quot;  =&gt; 1
               , &quot;min&quot;   =&gt; 1
               , &quot;sec&quot;   =&gt; 1
               , &quot;tz&quot;    =&gt; &quot;GMT&quot; );
$rdate2 = array( 2002, 2, 2, 2, 2, 2, &quot;GMT&quot; );
$rdate3 = &quot;3 March 2003 03.03.03&quot;;
$rdate4 = array( 2004, 4, 4, 4, 4, 4, &quot;GMT&quot; );
$rdate5 = array( 2005, 10, 5, 5, 5, 5 );
$rdate8 = array( &quot;year&quot; =&gt; 2007, &quot;month&quot; =&gt; 7, &quot;day&quot; =&gt; 7 );
$rdur6  = array( &quot;week&quot; =&gt; 0
               , &quot;day&quot;  =&gt; 0
               , &quot;hour&quot; =&gt; 5
               , &quot;min&quot;  =&gt; 5
               , &quot;sec&quot;  =&gt; 5 );
$rdur7  = array( 0, 0, 6 );
  <span class="comment">// duration for 6 hours</span>
$rdur8  = array( &quot;week&quot; =&gt; 8 );
  <span class="comment">// duration for 8 weeks</span>

$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$vevent->setProperty( &quot;rdate&quot;, array( $rdate1 ));
  <span class="comment">// one recurrence date, date in 7-params format (DATE-TIME)</span>

$vevent->setProperty( &quot;rdate&quot;, array( $rdate1, $rdate2 ));
  <span class="comment">// two dates, date 7-params format (DATE-TIME)</span>

$vevent->setProperty( &quot;rdate&quot;, array( array( $rdate1, $rdate2 )
                                    , array( $rdate3, $rdate4 ))
                             , array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
  <span class="comment">// Both fromdate and enddate must have 7 params (DATE-TIME) !!!</span>

$vevent->setProperty( &quot;rdate&quot;, array( array( $rdate2, $rdur6 ))
                             , array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
  <span class="comment">// one duration (fromdate-duration)</span>

$vevent->setProperty( &quot;rdate&quot;, array( array( $rdate1, $date2 )
                                    , array( $rdate3, $rdur7 ))
                             , array( &quot;VALUE&quot; => &quot;PERIOD&quot; ));
  <span class="comment">// period, pairs of fromdate+enddate and fromdate-duration</span>

$vevent->setProperty( &quot;rdate&quot;, array( $rdate5, $date8 ))
                             , array( &quot;VALUE&quot; => &quot;DATE&quot; ));
  <span class="comment">// dates in DATE format</span>
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="RECURRENCE-ID"></a><h3>3.2.30 RECURRENCE-ID</h3>
This property is used in conjunction with the <a href="#UID">UID</a> and <a href="#SEQUENCE">SEQUENCE</a> property to identify a specific instance of a recurring <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> or <a href="#VJOURNAL">VJOURNAL</a> <i>calendar</i> component and is OPTIONAL and MAY NOT occur more than once.<br><br>
The property value is the effective value of the <a href="#DTSTART">DTSTART</a> property of the recurrence instance. The default value type is DATE-TIME, can be set to DATE (params <span class="ref">2</span>).
<h5>Delete RECURRENCE-ID</h5>
Remove RECURRENCE-ID from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;RECURRENCE-ID&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;RECURRENCE-ID&quot; );</p>
<h5>Get RECURRENCE-ID</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;RECURRENCE-ID&quot; )</p>
<p class="comment">output = recurrIdDate<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;RECURRENCE-ID&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; recurrIdDate<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$recurrDate = $vtodo->getProperty( &quot;RECURRENCE-ID&quot; );</p>
<h5>Set RECURRENCE-ID</h5>
Insert property value. If DATE value type is expected, &quot;VALUE&quot; = &quot;DATE&quot; <b>must</b> be set (in params<span class="ref">2</span>) otherwise DATE-TIME (default) value type is set.
<br>
<br>
If no timezone parameter (tz or tzidparam below) is set (then local time is assumed) and config <a href="#dTZID">TZID</a> is set,
date-time values will be set WITH timezone from config.
Notice, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime from a time zone to another.
<p class="label">Format</p>
<p class="format">setProperty( &quot;recurrence-id&quot;, recurrIdDate [, params ] )</p>
<p class="comment">recurrIdDate<span class="ref">1</span> = array( &quot;year&quot;  =&gt; int year
                     , &quot;month&quot; =&gt; int month
                     , &quot;day&quot;   =&gt; int day
                    [, &quot;hour&quot;  =&gt; int hour
                     , &quot;min&quot;   =&gt; int min
                     , &quot;sec&quot;   =&gt; int sec
                    [, &quot;tz&quot;    =&gt; mixed tz ]] )
recurrIdDate  = int year
              , int month
              , int day
             [, int hour
              , int min
              , int sec
             [, mixed tz ]]
recurrIdDate  = array( int year
                     , int month
                     , int day
                    [, int hour
                     , int min
                     , int sec
                    [, mixed tz ]] )
recurrIdDate  = array( &quot;timestamp&quot; =&gt; int timestamp
                    [, &quot;tz&quot;        =&gt; mixed tz ] )
recurrIdDate  = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex. &quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
tz            = timezone / offset
                (timezone will be used as tzidparam, if tzidparam not exists)
offset        = (+/-)HHmm[ss], local date + UTC offset =&gt; <a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME
params<span class="ref">2</span>       = array([ datetimeparam/dateparam/tzidparam ]
                             [, rangeparam ]
                             [, xparam ] )
datetimeparam = &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot; // <span class="ref">default, output as DATE-TIME</span>
dateparam     = &quot;VALUE&quot; =&gt; &quot;DATE&quot; // <span class="ref">output as DATE</span>
tzidparam     = &quot;TZID&quot; =&gt; &lt;timezone identifier&gt;
                // <span class="ref">output as local date-time with timezone identifier</span>
rangeparam    = &quot;RANGE&quot; =&gt; ( "THISANDPRIOR" / "THISANDFUTURE" )
                  // <span class="ref">range parameter</span>
xparam        = *[ xparamkey =&gt; xparamvalue ]</p>
<p class="label">Example</p>
<p class="example">$vtodo->setProperty( &quot;recurrence-id&quot;, &quot;3 March 2003 03.03.03&quot; );
  <span class="comment">// 3 march 2003 03.03.03 local time</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="RELATED-TO"></a><h3>3.2.31 RELATED-TO</h3>
The property is used to represent a relationship or reference between one <i>calendar</i> component and another and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> components.<br><br>
The property value consists of the persistent, globally unique identifier of another <i>calendar</i> component. This value would be represented in a <i>calendar</i> component by the <a href="#UID">UID</a> property.<br><br>
The value type for RELATED-TO is TEXT.
<h5>Delete RELATED-TO</h5>
Remove RELATED-TO from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;RELATED-TO&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->deleteProperty( &quot;RELATED-TO&quot; );</p>
<p class="label">Example 2</p>
Delete RELATED-TO property no 2.
<p class="example">$vjournal->deleteProperty( &quot;RELATED-TO&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all RELATED-TO properties.
<p class="example">while( $vjournal->deleteProperty( &quot;RELATED-TO&quot; ))
  continue;</p>
<h5>Get RELATED-TO</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;RELATED-TO&quot; )</p>
<p class="comment">output = relid<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;RELATED-TO&quot;, propOrderNo/FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; relid<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;RELATED-TO&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo RELATED-TO</p>
<p class="label">Example</p>
<p class="example">$relatedId = $vtodo->getProperty( &quot;RELATED-TO&quot; );</p>
<h5>Set RELATED-TO</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;Related-To&quot;, relid [, params [, propOrderNo ]] )</p>
<p class="comment">relid<span class="ref">1</span>      = Value type TEXT.
params<span class="ref">2</span>     = array( [ reltype ] [, xparam] )
reltype     = &quot;RELTYPE&quot; =&gt; (&quot;PARENT&quot; (Default)
                          / &quot;CHILD&quot;
                          / &quot;SIBLING&quot;
                          / iana-token
                          / x-name)
xparam      = *[ xparamkey =&gt; xparamvalue ]
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vtodo->setProperty( &quot;related-to&quot;, &quot;19960401-080045-4000F192713@host.com&quot;);</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="REPEAT"></a><h3>3.2.32 REPEAT</h3>
This property defines the number of time the <a href="#VALARM">ALARM</a> should be repeated, after the initial trigger.
If the <a href="#VALARM">ALARM</a> triggers more than once, then this property MUST be specified along with the <a href="#DURATION">DURATION</a> property.
<h5>Delete REPEAT</h5>
Remove REPEAT from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;REPEAT&quot; )</p>
<p class="label">Example</p>
<p class="example">$valarm->deleteProperty( &quot;REPEAT&quot; );</p>
<h5>Get REPEAT</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;REPEAT&quot; )</p>
<p class="comment">output = repeatTimes<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;REPEAT&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; repeatTimes<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$repeat = $vtodo->getProperty( &quot;REPEAT&quot; );</p>
<h5>Set REPEAT</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;repeat&quot;, repeatTimes [, xparam ] )</p>
<p class="comment">repeatTimes<span class="ref">1</span> = Value type INTEGER
xparam<span class="ref">2</span>      = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$valarm->setProperty( &quot;repeat&quot;, 2 );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="REQUEST-STATUS"></a><h3>3.2.33 REQUEST-STATUS</h3>
This property defines the status code returned for a scheduling request and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
<h5>Delete REQUEST-STATUS</h5>
Remove REQUEST-STATUS from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;REQUEST-STATUS&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vtodo->deleteProperty( &quot;REQUEST-STATUS&quot; );</p>
<p class="label">Example 2</p>
Delete REQUEST-STATUS property no 2.
<p class="example">$vjournal->deleteProperty( &quot;REQUEST-STATUS&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all REQUEST-STATUS properties.
<p class="example">while( $vjournal->deleteProperty( &quot;REQUEST-STATUS&quot; ))
  continue;</p>
<h5>Get REQUEST-STATUS</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;REQUEST-STATUS&quot; )</p>
<p class="comment">output = array( &quot;statcode&quot; =&gt; statcode<span class="ref">1</span>
              , &quot;text&quot;     =&gt; errtext<span class="ref">2</span>
            [ , &quot;extdata&quot;  =&gt; extraData<span class="ref"> 3</span> ] )</p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( &quot;value&quot; =&gt; array( &quot;statcode&quot; =&gt; statcode<span class="ref">1</span>
                                , &quot;text&quot;     =&gt; errtext<span class="ref">2</span>
                              [ , &quot;extdata&quot;  =&gt; extraData<span class="ref">3</span> ] )
              , &quot;params&quot; =&gt; params<span class="ref">4</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;REQUEST-STATUS&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo REQUEST-STATUS</p>
<p class="label">Example</p>
<p class="example">$requestStatus = $vtodo->getProperty( &quot;REQUEST-STATUS&quot; );</p>
<h5>Set REQUEST-STATUS</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;Request-Status&quot;
           , statcode, errtext [,extraData/FALSE [,params [,propOrderNo]]])</p>
<p class="comment">statcode<span class="ref">1</span>  = Hierarchical, numeric return status code
                          (1*DIGIT *(&quot;.&quot; 1*DIGIT))
errtext<span class="ref">2</span>    = Textual status description
extraData<span class="ref">3</span>  = Textual exception data.
             For example, the offending property name and value
             or complete property line.
params<span class="ref">4</span>     = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam ] )
xparam      = *[ xparamkey =&gt; xparamvalue ]
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vfreebusy->setProperty(&quot;request-status&quot;
                       , 2.0
                       , &quot;Invalid property value&quot;
                       , &quot;DTSTART:96-Apr-31&quot;);</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="RESOURCES"></a><h3>3.2.34 RESOURCES</h3>
This property defines the equipment or resources anticipated for an activity specified by a <i>calendar</i> entity and is OPTIONAL and MAY occur more than once in <a href="#VEVENT">VEVENT</a> and <a href="#VTODO">VTODO</a> components.<br><br>
The value type for RESOURCES is TEXT.
<h5>Delete RESOURCES</h5>
Remove RESOURCES from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;RESOURCES&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;RESOURCES&quot; );</p>
<p class="label">Example 2</p>
Delete RESOURCES property no 2.
<p class="example">$vevent->deleteProperty( &quot;RESOURCES&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all RESOURCES properties.
<p class="example">while( $vevent->deleteProperty( &quot;RESOURCES&quot; ))
  continue;</p>
<h5>Get RESOURCES</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;RESOURCES&quot; )</p>
<p class="comment">output = resources<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;RESOURCES&quot;, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; resources<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;RESOURCES&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo RESOURCES</p>
<p class="label">Example</p>
<p class="example">$resources = $vtodo->getProperty( &quot;RESOURCES&quot; );</p>
<h5>Set RESOURCES</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;resources&quot;, resources [, params [, propOrderNo ]] )</p>
<p class="comment">resources<span class="ref">1</span>  = string resource / array( *resource )
resource    = textual resources or subtypes of the <i>calendar</i> component,
              can be specified as a list of resources
              separated by the COMMA character.
params<span class="ref">2</span>     = array([ &quot;ALTREP&quot;   =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
                   [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
                   [, xparam] )
xparam      = *[ xparamkey =&gt; xparamvalue ]
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;resources&quot;, &quot;COMPUTER PROJECTOR&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="RRULE"></a><h3>3.2.35 RRULE</h3>
This property defines a rule or repeating pattern for recurring <a href="#VEVENT">EVENTs</a>, <a href="#VTODO">TODOs</a>,  <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> definitions and is OPTIONAL and MAY occur more than once.
<h5>Delete RRULE</h5>
Remove RRULE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;RRULE&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;RRULE&quot; );</p>
<p class="label">Example 2</p>
Delete RRULE property no 2.
<p class="example">$vevent->deleteProperty( &quot;RRULE&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all RRULE properties.
<p class="example">while( $vevent->deleteProperty( &quot;RRULE&quot; ))
  continue;</p>
<h5>Get RRULE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;RRULE&quot; )</p>
<p class="comment">output = recur<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;RRULE&quot;, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; recur<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparams<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;RRULE&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo RRULE</p>
<p class="label">Example</p>
<p class="example">$rrules = $vtodo->getProperty( &quot;RRULE&quot; );</p>
<h5>Set RRULE</h5>
Insert property value.
<br>
Parameters will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;rrule&quot;, recur [, xparams [, propOrderNo ]] )</p>
<p>
For rules example see <a href="#EXRULE">Exrule</a> format and in detail in <a href="http://kigkonsult.se/downloads/dl.php?f=rfc2445" title="RFC2445" target="_blank">RFC2445</a> - Internet Calendaring and Scheduling Core Object Specification (iCalendar).
</p>
<p class="comment">recur<span class="ref">1</span>      = see <a href="#EXRULE">Exrule</a>
xparams<span class="ref">2</span>    = array( *[ xparamkey =&gt; xparamvalue ] )
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>

<a name="SEQUENCE"></a><h3>3.2.36 SEQUENCE</h3>
This property defines the revision sequence number of the <i>calendar</i> component within a sequence of revisions.
The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>,
<a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
<br>
<p class="quotes">
It is monotonically incremented by the <a href="#ORGANIZER">ORGANIZER's</a> CUA (Calendar
User Agent) each time the <a href="#ORGANIZER">ORGANIZER</a> makes a significant revision
to the <i>calendar</i> component.

When the <a href="#ORGANIZER">ORGANIZER</a> makes changes to one of the following
properties, the sequence number MUST be incremented: <a href="#DTSTART">DTSTART</a>,
<a href="#DTEND">DTEND</a>, <a href="#DUE">DUE</a>, <a href="#RDATE">RDATE</a>, <a href="#RRULE">RRULE</a>,
<a href="#EXDATE">EXDATE</a>, <a href="#EXRULE">EXRULE</a>, <a href="#STATUS">STATUS</a>. In addition,
changes made by the <a href="#ORGANIZER">ORGANIZER</a> to other properties can also force
the sequence number to be incremented. The <a href="#ORGANIZER">ORGANIZER</a> CUA MUST
increment the sequence number when ever it makes changes to
properties in the <i>calendar</i> component that the <a href="#ORGANIZER">ORGANIZER</a>
deems will jeopardize the validity of the participation status of the
<a href="#ATTENDEE">Attendees</a>. For example, changing the location
of a meeting from one locale to another distant locale could
effectively impact the participation status of the <a href="#ATTENDEE">Attendees</a>.
</p>
<h5>Delete SEQUENCE</h5>
Remove SEQUENCE from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;SEQUENCE&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtodo->deleteProperty( &quot;SEQUENCE&quot; );</p>
<h5>Get SEQUENCE</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;SEQUENCE&quot; )</p>
<p class="comment">output = sequence<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;SEQUENCE&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; sequence<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$sequence = $vtodo->getProperty( &quot;SEQUENCE&quot; );</p>
<h5>Set SEQUENCE</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;sequence&quot; [, sequence [, xparam ]] )</p>
<p class="comment">sequence<span class="ref">1</span> = Value type INTEGER
xparam<span class="ref">2</span>   = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->setProperty( &quot;sequence&quot;, 2 );
  <span class="comment">// set sequence number to 2</span></p>
<p class="label">Example 2</p>
<p class="example">$vevent->setProperty( &quot;sequence&quot; );
  <span class="comment">// force sequence number to be set to 0
  // or, if sequence exists, incremented by 1</span></p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="STATUS"></a><h3>3.2.37 STATUS</h3>
This property defines the overall status or confirmation for the <i>calendar</i> component. The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components.
<h5>Delete STATUS</h5>
Remove STATUS from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;STATUS&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtodo->deleteProperty( &quot;STATUS&quot; );</p>
<h5>Get STATUS</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;STATUS&quot; )</p>
<p class="comment">output = status<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;STATUS&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; status<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$status = $vtodo->getProperty( &quot;STATUS&quot; );</p>
<h5>Set STATUS</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;status&quot;, status [, xparam ] )</p>
<p class="comment">                          // <span class="ref">Status values for a <a href="#vevent">VEVENT</a></span>
status<span class="ref">1</span>  = &quot;TENTATIVE&quot;    // <span class="ref">Indicates event is tentative</span>
         / &quot;CONFIRMED&quot;    // <span class="ref">Indicates event is definite</span>
         / &quot;CANCELLED&quot;    // <span class="ref">Indicates event was cancelled</span>
                          // <span class="ref">Status values for <a href="#VTODO">VTODO</a></span>
status<span class="ref">1</span>  = &quot;NEEDS-ACTION&quot; // <span class="ref">Indicates to-do needs action</span>
         / &quot;COMPLETED&quot;    // <span class="ref">Indicates to-do completed</span>
         / &quot;IN-PROCESS&quot;   // <span class="ref">Indicates to-do in process of</span>
         / &quot;CANCELLED&quot;    // <span class="ref">Indicates to-do was cancelled</span>
                          // <span class="ref">Status values for <a href="#VJOURNAL">VJOURNAL</a></span>
status<span class="ref">1</span>  = &quot;DRAFT&quot;        // <span class="ref">Indicates journal is draft</span>
         / &quot;FINAL&quot;        // <span class="ref">Indicates journal is final</span>
         / &quot;CANCELLED&quot;    // <span class="ref">Indicates journal is removed</span>
xparam<span class="ref">2</span>  = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;Status&quot;, &quot;COMPLETED&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="SUMMARY"></a><h3>3.2.38 SUMMARY</h3>
This property defines a short (&quot;one line&quot;) summary or subject for the <i>calendar</i> component. (In &quot;rfc2445, Recommended Practices&quot;, up to 255 characters) (, analogous to a mail SUBJECT). The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a> and <a href="#VJOURNAL">VJOURNAL</a> components. The property is REQUIRED and MUST occur once in <a href="#VALARM">VALARM</a> (EMAIL) <i>calendar</i> component.<br><br>
The value type for SUMMARY is TEXT.
<h5>Delete SUMMARY</h5>
Remove SUMMARY from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;SUMMARY&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;SUMMARY&quot; );</p>
<h5>Get SUMMARY</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;SUMMARY&quot; )</p>
<p class="comment">output = summary<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;SUMMARY&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; summary<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$summary = $vtodo->getProperty( &quot;SUMMARY&quot; );</p>
<h5>Set SUMMARY</h5>
Insert property value.
<br>
Parameters, if any, will be ordered as prescribed in rcf2445.
<p class="label">Format</p>
<p class="format">setProperty( &quot;summary&quot;, summary [, params ] )</p>
<p CLASS="comment">summary<span class="ref">1</span> = Value type TEXT,
           a short, one line summary about the activity or journal entry.
params<span class="ref">2</span>  = array( [&quot;ALTREP&quot;   =&gt; &quot;&lt;an alternate text representation, URI&gt;&quot;]
                [, &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;]
                [, xparam ] )
xparam   = *[ xparamkey =&gt; xparamvalue ]</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;summary&quot;, &quot;This is a summary&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TRANSP"></a><h3>3.2.39 TRANSP</h3>
This property defines whether an <a href="#VEVENT">EVENT</a> is transparent or not to busy time searches and is OPTIONAL and MUST NOT occur more than once.
<h5>Delete TRANSP</h5>
Remove TRANSP from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TRANSP&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;TRANSP&quot; );</p>
<h5>Get TRANSP</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TRANSP&quot; )</p>
<p class="comment">output = transp<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TRANSP&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; transp<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$transp = $vtodo->getProperty( &quot;TRANSP&quot; );</p>
<h5>Set TRANSP</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;transp&quot;, transp [, xparam ] )</p>
<p class="comment">transp<span class="ref">1</span> = &quot;OPAQUE&quot; / &quot;TRANSPARENT&quot;
xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty( &quot;transp&quot;, &quot;TRANSPARENT&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TRIGGER"></a><h3>3.2.40 TRIGGER</h3>
This property specifies when an <a href="#VALARM">ALARM</a> will trigger and is REQUIRED and MUST NOT occur more than once.<br><br>
The default value type is DURATION. The value type can be set to a DATE-TIME value type, in which case the value MUST specify an <a href="#DATE_WITH_UTC_TIME">UTC</a> formatted DATE-TIME value.
<h5>Delete TRIGGER</h5>
Remove TRIGGER from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TRIGGER&quot; )</p>
<p class="label">Example</p>
<p class="example">$valarm->deleteProperty( &quot;TRIGGER&quot; );</p>
<h5>Get TRIGGER</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TRIGGER&quot; )</p>
<p class="comment">output = duration/date</p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TRIGGER&quot;, FALSE , TRUE )</p>
<p class="comment">output   = array( &quot;value&quot;        =&gt; duration<span class="ref">1</span>/date<span class="ref">3</span> )
                , &quot;params&quot;       =&gt; params<span class="ref">4</span> )
<p class="label">Example</p>
<p class="example">$trigger = $vtodo->getProperty( &quot;TRIGGER&quot; );</p>
<h5>Set TRIGGER</h5>
Insert property value.<br>
Note, use function <a href="#transformDateTime">transformDateTime</a>
to change a datetime (in a local time zone) to UTC time zone.
<p class="label">Format 1</p>
<p class="format">setProperty( &quot;trigger&quot;, duration<span class="ref">1</span> [, params<span class="ref">4</span> ] )</p>
<p class="label">Format 2</p>
<p class="format">setProperty( &quot;trigger&quot;, duration<span class="ref">2</span> [, params<span class="ref">4</span> ] )</p>
<p class="label">Format 3</p>
<p class="format">setProperty( &quot;trigger&quot;, date<span class="ref">3</span> [, params<span class="ref">4</span> ] )</p>
<p class="label">Format</p>
<p class="format">setProperty( &quot;trigger&quot;, int year/FALSE
                      , int month/FALSE
                      , int day/FALSE
                     [, int week/FALSE
                     [, int hour/FALSE
                      , int min/FALSE
                      , int sec/FALSE
                     [, bool relatedStart=TRUE
                     [, bool before=TRUE
                     [, array params<span class="ref">4</span> ]]]]] )</p>
<p class="comment">duration<span class="ref">1</span> = array( &quot;week&quot;         =&gt; int week
                , &quot;relatedStart&quot; =&gt; bool relstart
                , &quot;before&quot;       =&gt; bool before )
duration<span class="ref">1</span> = array( &quot;day&quot;  =&gt; int day
                , &quot;hour&quot; =&gt; int hour
                , &quot;min&quot;  =&gt; int min
                , &quot;sec&quot;  =&gt; int sec
                , &quot;relatedStart&quot; =&gt; bool relstart
                , &quot;before&quot;       =&gt; bool before )
relatedStart = TRUE  : related start (default),
               FALSE : related end
before       = TRUE  : before relatedStart (default),
               FALSE : after relatedStart
duration<span class="ref">2</span> = string dur-value = ([&quot;+&quot;]/&quot;-&quot;)&quot;P&quot;(dur-date/dur-time/dur-week)
dur-date     = dur-day [dur-time]
dur-time     = &quot;T&quot; (dur-hour / dur-minute / dur-second)
dur-week     = 1*DIGIT &quot;W&quot;
dur-day      = 1*DIGIT &quot;D&quot;
dur-hour     = 1*DIGIT &quot;H&quot; [dur-minute]
dur-minute   = 1*DIGIT &quot;M&quot; [dur-second]
dur-second   = 1*DIGIT &quot;S&quot;
date<span class="ref">3</span>        = array( &quot;year&quot;  =&gt; int year // <span class="ref"><a href="#DATE_WITH_UTC_TIME">UTC</a> DATE-TIME</span>
                    , &quot;month&quot; =&gt; int month
                    , &quot;day&quot;   =&gt; int day
                   [, &quot;hour&quot;  =&gt; int hour
                    , &quot;min&quot;   =&gt; int min
                    , &quot;sec&quot;   =&gt; int sec ])
date<span class="ref">3</span>        = array ( &quot;timestamp&quot; =&gt; int timestamp ) // <span class="ref"><a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
date<span class="ref">3</span>        = string datestring // <span class="ref">string date,
                                    acceptable by strtotime function,
                                    ex.&nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
                               // <span class="ref"><a class="ref" href="#DATE_WITH_UTC_TIME">UTC</a>DATE-TIME</span>
params<span class="ref">4</span>       = array( [[ reltype [, trigRelparam ]] / datetimeparam ]
                    [, xparams ] )
reltyp       = &quot;RELATED&quot; =&gt; &quot;START&quot; (default) / &quot;END&quot;
trigRelparam = &quot;VALUE&quot; =&gt; &quot;DURATION&quot;
datetimeparam= &quot;VALUE&quot; =&gt; &quot;DATE-TIME&quot;
xparam       = *[ xparamkey =&gt; xparamvalue ]</p>
<p class="label">Example 1</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , FALSE, FALSE, FALSE, FALSE, 1, 2, 3 );
  <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
<p class="label">Example 2</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , array (&quot;hour&quot;=&gt;1,&quot;min&quot;=&gt;2,&quot;sec&quot;=&gt;3 );
  <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
<p class="label">Example 3</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , &quot;PT1H2M3S&quot; );
  <span class="comment">// duration, 1 hour 2 min 3 sec, before start</span></p>
<p class="label">Example 4</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , FALSE, FALSE, FALSE, 1
                    , FALSE, FALSE, FALSE, FALSE, FALSE );
  <span class="comment">// duration, 1 week after end</span></p>
<p class="label">Example 5</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , array ( &quot;week&quot; =&gt; 1
                            , &quot;relatedStart&quot; =&gt; FALSE
                            , &quot;before&quot;       =&gt; FALSE ));
  <span class="comment">// duration, 1 week after end</span></p>
<p class="label">Example 6</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , &quot;P1W&quot;
                    , array( &quot;related&quot; =&gt; &quot;END&quot; ));
  <span class="comment">// duration, 1 week after end</span></p>
<p class="label">Example 7</p>
<p class="example">$valarm->setProperty( &quot;trigger&quot;
                    , array( &quot;year&quot; =&gt; 2007
                           , &quot;month&quot; =&gt; 6
                           , &quot;day&quot;   =&gt; 5,
                           , &quot;hour&quot;  =&gt; 2
                           , &quot;min&quot;   =&gt; 2
                           , &quot;sec&quot;   =&gt; 3 ));</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TZID"></a><h3>3.2.41 TZID</h3>
This property specifies the text value that uniquely identifies the <a href="#VTIMEZONE">VTIMEZONE</a> <i>calendar</i> component and is REQUIRED, but MUST NOT occur more than once. <br><br>
The value type for TZID is TEXT.
<h5>Delete TZID</h5>
Remove TZID from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TZID&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtimezone->deleteProperty( &quot;TZID&quot; );</p>
<h5>Get TZID</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TZID&quot; )</p>
<p class="comment">output = tzid<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TZID&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; tzid<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$tzid = $vtimezone->getProperty( &quot;TZID&quot; );</p>
<h5>Set TZID</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;tzid&quot;, tzid [, xparam ] )</p>
<p class="comment">tzid<span class="ref">1</span>   = Value type TEXT
xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty( &quot;tzid&quot;, &quot;US-Eastern&quot; );
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TZNAME"></a><h3>3.2.42 TZNAME</h3>
This property specifies the customary designation for a <a href="#VTIMEZONE">STANDARD</a> or <a href="#VTIMEZONE">DAYLIGHT</a> description and is OPTIONAL and MAY occur more than once.<br><br>
The value type for TZNAME is TEXT.
<h5>Delete TZNAME</h5>
Remove TZNAME from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TZNAME&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vtimezonestd->deleteProperty( &quot;TZNAME&quot; );</p>
<p class="label">Example 2</p>
Delete TZNAME property no 2.
<p class="example">$vtimezonestd->deleteProperty( &quot;TZNAME&quot;, 2 );</p>
<p class="label">Example 3</p>
Deleting all TZNAME properties.
<p class="example">while( $vtimezonestd->deleteProperty( &quot;TZNAME&quot; ))
  continue;</p>
<h5>Get TZNAME</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TZNAME&quot; )</p>
<p class="comment">output = tzname<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TZNAME&quot;, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; tzname<span class="ref">1</span>
              , &quot;params&quot; =&gt; params<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( &quot;TZNAME&quot;, propOrderNo )</p>
<p class="comment">Get propOrderNo TZNAME</p>
<p class="label">Example</p>
<p class="example">$tzname = $timezonestandard->getProperty( &quot;TZNAME&quot; );</p>
<h5>Set TZNAME</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;tzname&quot;, tzname [, params [, propOrderNo ]] )</p>
<p class="comment">tzname<span class="ref">1</span>     = Value type TEXT
params<span class="ref">2</span> = array( [ &quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot; ] [, xparam ] )
xparam      = *[ xparamkey =&gt; xparamvalue ]
propOrderNo = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
$vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
$standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
$standard->setProperty( &quot;tzname&quot;, &quot;EST&quot; );
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TZOFFSETFROM"></a><h3>3.2.43 TZOFFSETFROM</h3>
This property specifies the offset which is in use prior to this <a href="#VTIMEZONE">TIMEZONE</a> observance.
The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
<h5>Delete TZOFFSETFROM</h5>
Remove TZOFFSETFROM from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TZOFFSETFROM&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtimezonestd->deleteProperty( &quot;TZOFFSETFROM&quot; );</p>
<h5>Get TZOFFSETFROM</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TZOFFSETFROM&quot; )</p>
<p class="comment">output = tzoffsetfrom<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TZOFFSETFROM&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; tzoffsetfrom<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$tzoffsetfrom = $timezonestandard->getProperty( &quot;TZOFFSETFROM&quot; );</p>
<h5>Set TZOFFSETFROM</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;tzoffsetfrom&quot;, tzoffsetfrom [, xparam ] )</p>
<p class="comment">tzoffsetfrom<span class="ref">1</span> = (+/-)HHmm[ss], UTC offset
xparam<span class="ref">2</span>       = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
$vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
$standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
$standard->setProperty( &quot;tzname&quot;, &quot;EST&quot; );
$standard->setProperty( &quot;tzoffsetfrom&quot;, &quot;-0500&quot; );
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TZOFFSETTO"></a><h3>3.2.44 TZOFFSETTO</h3>
This property specifies the offset which is in use in this <a href="#VTIMEZONE">TIMEZONE</a> observance.
The property is REQUIRED, but MUST NOT occur more than once in <a href="#VTIMEZONE">STANDARD</a> and <a href="#VTIMEZONE">DAYLIGHT</a> components.
<h5>Delete TZOFFSETTO</h5>
Remove TZOFFSETTO from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TZOFFSETTO&quot; )</p>
<p class="label">Example</p>
<p class="example">$daylight->deleteProperty( &quot;TZOFFSETTO&quot; );</p>
<h5>Get TZOFFSETTO</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TZOFFSETTO&quot; )</p>
<p class="comment">output = tzoffsetto<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TZOFFSETTO&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; tzoffsetto<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$tzoffsetto = $timezonestandard->getProperty( &quot;TZOFFSETTO&quot; );</p>
<h5>Set TZOFFSETTO</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;tzoffsetto&quot;, tzoffsetto [, xparam ] )</p>
<p class="comment">tzoffsetto<span class="ref">1</span> = (+/-)HHmm[ss], UTC offset
xparam<span class="ref">2</span>     = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
$vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101&quot; );
$standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
.. .
$daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
$daylight->setProperty( &quot;tzoffsetto&quot;, &quot;1345&quot; );
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="TZURL"></a><h3>3.2.45 TZURL</h3>
The TZURL provides a means for a <a href="#VTIMEZONE">VTIMEZONE</a> component to point to
a network location that can be used to retrieve an up-to-date version of itself. The property
is OPTIONAL and MUST NOT occur more than once.
<h5>Delete TZURL</h5>
Remove TZURL from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;TZURL&quot; )</p>
<p class="label">Example</p>
<p class="example">$vtimezone->deleteProperty( &quot;TZURL&quot; );</p>
<h5>Get TZURL</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;TZURL&quot; )</p>
<p class="comment">output = tzurl<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;TZURL&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; tzurl<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$tzurl = $timezonestandard->getProperty( &quot;TZURL&quot; );</p>
<h5>Set TZURL</h5>
Insert property value.
<p class="label">Format</p>
<p class="format">setProperty( &quot;tzurl&quot;, tzurl [, xparam ] )</p>
<p class="comment">tzurl<span class="ref">1</span>  = Value type URI
xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$tz        = &quot;http://zones.stds_r_us.net/tz/US-Eastern&quot; );
$config    = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty( &quot;Tzid&quot;, &quot;US-Eastern&quot; );
$vtimezone->setProperty( &quot;Last-Modified&quot;, &quot;19870101T000000&quot; );
$vtimezone->setProperty( &quot;tzurl&quot;, $tz );
.. .
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="UID"></a><h3>3.2.46 UID</h3>
The persistent, globally <b>U</b>nique <b>ID</b>entifier for the <i>calendar</i> component.
The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.<br>
However, UID is <b>AUTOMATICALLY</b> generated in iCalcreator and configuration <a href="#Unique_id">unique_id</a>, is used when auto-creating component UID.
<br>
<br>
UID generated format :
<p class="format">date(&quot;Ymd\THisT&quot;).&quot;-&quot;.[microSec][random].&quot;@&quot;.<a href="#Unique_id">unique_id</a>
</p>
microSec = microseconds, 4 pos<br>
random    = 6 characters aA-zZ, 0-9
<p class="label">Example</p>
<p class="example">&quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;</p>
UID may be required when importing iCal files into some calendaring software (MS etc.),
as well as (<i>calendar</i>) properties <a href="#X-PROPERTY">x-properties</a> "X-WR-CALNAME", "X-WR-CALDESC" and "X-WR-TIMEZONE",
<a href="#METHOD">METHOD</a> (value PUBLISH etc.) and the (also automatically created) <a href="#DTSTAMP">DTSTAMP</a> property.
<br><br>
The value type for UID is TEXT.
<h5>Delete UID</h5>
If UID is remove from a component, UID will automatically be recreated when <i>calendar</i> output functions like <a href="#createCalendar">createCalendar</a>, <a href="#returnCalendar">returnCalendar</a> or <a href="#saveCalendar">saveCalendar</a> is executed.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;UID&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;UID&quot; );</p>
<h5>Get UID</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;UID&quot; )</p>
<p class="comment">output = uid<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;UID&quot;, FALSE , TRUE )</p>
<p class="comment">output = array( &quot;value&quot;  =&gt; uid<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$uid = $vevent->getProperty( &quot;UID&quot; );</p>
<h5>Set UID</h5>
Insert property value, overrides any previously set or auto-created UID.<br>
Do <b>NOT</b> use an integer UID or only a component name in UID (ex. &quot;vevent&quot;), this may cause malfunction in <a href="#setComponent">setComponent</a> with index or UID argument.
<p class="label">Format</p>
<p class="format">setProperty( &quot;uid&quot;, uid [, xparam ] )</p>
<p class="comment">uid<span class="ref">1</span>    = Value type TEXT
xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] )</p>
<p class="label">Example</p>
<p class="example">$vevent->setProperty(&quot;uid&quot;,&quot;20070803T194810CEST-0123U3PXiX@kigkonsult.se&quot;);</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="URL"></a><h3>3.2.47 URL</h3>
This property defines a Uniform Resource Locator (URL) associated with the iCalendar object.
The property is OPTIONAL and MUST NOT occur more than once in <a href="#VEVENT">VEVENT</a>, <a href="#VTODO">VTODO</a>, <a href="#VJOURNAL">VJOURNAL</a> and <a href="#VFREEBUSY">VFREEBUSY</a> components.
<h5>Delete URL</h5>
Remove URL from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;URL&quot; )</p>
<p class="label">Example</p>
<p class="example">$vevent->deleteProperty( &quot;URL&quot; );</p>
<h5>Get URL</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;URL&quot; )</p>
<p class="comment">output = url<span class="ref">1</span></p>
<p class="label">Format 2</p>
<p class="format">getProperty( &quot;URL&quot;, FALSE , TRUE )</p>
<p class="comment">output = array &quot;value&quot;   =&gt; url<span class="ref">1</span>
              , &quot;params&quot; =&gt; xparam<span class="ref">2</span> )</p>
<p class="label">Example</p>
<p class="example">$url = $vevent->getProperty( &quot;URL&quot; );</p>
<h5>Set URL</h5>
Insert property value.<br>
<p class="label">Format</p>
<p class="format">setProperty( &quot;url&quot;, url [, xparam ] )</p>
<p class="comment">url<span class="ref">1</span>    = Value type URI
xparam<span class="ref">2</span> = array( *[ xparamkey =&gt; xparamvalue ] (</p>
<p class="label">Example</p>
<p class="example">$vtodo->setProperty( &quot;url&quot;, &quot;http://www.icaldomain.net&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>


<a name="X-PROPERTY_PROP"></a><h3>3.2.48 X-PROPERTY</h3>
A component, non-standard property with a TEXT value and a name with an &quot;X-&quot; prefix. In a component,
an x-property, with an unique name, can occur only once but the number of x-properties are unlimited.
<br>
<h5>Delete X-PROPERTY</h5>
Remove X-PROPERTY from component.
<p class="label">Format</p>
<p class="format">deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
<p class="label">Example 1</p>
<p class="example">$vevent->deleteProperty( &quot;&lt;X-PROPERTY&gt;&quot; );</p>
<p class="label">Example 2</p>
Deleting all x-properties.
<p class="example">while( $vevent->deleteProperty())
  continue;</p>
<h5>Get X-property</h5>
Fetch property value.
<p class="label">Format 1</p>
<p class="format">getProperty( &quot;&lt;X-PROPERTY&gt;&quot; )</p>
<p class="comment">output = array( propertyName<span class="ref">1</span>
              , propertyData<span class="ref">2</span> )</p>
<p class="label">Format 2</p>
<p class="format">getProperty()</p>
<p class="comment">output = array( propertyName<span class="ref">1</span>
              , propertyData<span class="ref">2</span> )</p>
<p class="label">Format 3</p>
<p class="format">getProperty( FALSE, propOrderNo/FALSE, TRUE )</p>
<p class="comment">output = array( propertyName<span class="ref">1</span>
              , array ( &quot;value&quot;  =&gt; propertyData<span class="ref">2</span> )
                      , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span>))</p>
<p class="label">Format 4</p>
<p class="format">getProperty( FALSE, propOrderNo )</p>
<p class="comment">Get propOrderNo X-property</p>

<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
if( FALSE !== ( $d = $vcalendar->getProperty( &quot;X-WR-TIMEZONE&quot; )))
   echo $d[1];
.. .</p>
<p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>

<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $xprop = $vcalendar->getProperty( )) {
.. .</p>
<p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>, propertyData<span class="ref">2</span> )</p>

<p class="label">Example 3</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $xprop = $vcalendar->getProperty( &quot;X-ABC-MMSUBJ&quot; )) {
.. .</p>
<p class="comment"> // $xprop = array( &quot;X-ABC-MMSUBJ&quot;, propertyData<span class="ref">2</span> )</p>
<p class="label">Example 4</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
while( $xprop = $vcalendar->getProperty( FALSE, FALSE, TRUE )) {
.. .</p>
<p class="comment"> // $xprop = array( propertyName<span class="ref">1</span>
 //               , array( &quot;value&quot;  =&gt; propertyData<span class="ref">2</span> )
 //                      , &quot;params&quot; =&gt; params<span class="ref">&nbsp;3</span> )</p>
<h5>Set X-property</h5>
Insert property name and value. If an x-prop with the same name already exists, it will be replaced.
<p class="label">Format</p>
<p class="format">setProperty( propertyName, propertyData [, params ] )</p>
<p class="comment">propertyName<span class="ref">1</span> = Any property name with a &quot;X-&quot; prefix
propertyData<span class="ref">2</span> = Value type TEXT
params<span class="ref">3</span>       = array( [&quot;LANGUAGE&quot; =&gt; &quot;&lt;lang&gt;&quot;] [, xparam] )
xparam       = *[ xparamkey =&gt; xparamvalue ]
propOrderNo  = int ordernumber, 1=1st, 2=2nd etc</p>
<p class="label">Example</p>
<p class="example">$component->setProperty(&quot;X-ABC-MMSUBJ&quot;,&quot;http://load.noise.org/mysubj.wav&quot;);</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_object_property_function_list">[up]</a>



<a NAME="Calendar_component_configuration_functions"></a><h2>3.3 Calendar Component configuration functions</h2>

<a name="Language_PROP"></a><h3>3.3.1 Language</h3>
Language for specific <i>calendar</i> component as defined in [RFC 1766].<br>
Language set at component level can be overridden by specific component property parameter.<br>
A successful &quot;setConfig&quot; returns TRUE.
<h5>Get language</h5>
Language for <i>calendar</i> (only if language is set at component level).
<p class="label">Format</p>
<p class="format">getConfig( &quot;language&quot; )</p>
<p class="label">Example</p>
<p class="example">$lang = $vevent->getConfig( &quot;language&quot; );</p>
<h5>Set LANGUAGE</h5>
<p class="label">Format</p>
<p class="format">setConfig( &quot;language&quot;, string &lt;lang&gt; )</p>
<p class="label">Example</p>
<p class="example">$vevent->setConfig( &quot;language&quot;, &quot;en&quot; );</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>

<a name="Calendar_component_object_misc_functions"></a><h2>3.4 Calendar component object misc. functions</h2>
Calendar component subcomponent functions

<a name="deleteComponent_PROP"></a><h4>3.4.1 deleteComponent</h4>
Remove subcomponent from component.
<p class="label">Format</p>
<p class="format">deleteComponent( int orderNumber )</p>
<p class="comment">Remove component with order number (1st=1, 2nd=2.. .).</p>
<p class="format">deleteComponent( string componentType [, int componentSuborderNumber])</p>
<p class="comment">Remove component with component type (ex. &quot;vevent&quot;)
and order 1 alt. suborder number.</p>
<p class="format">deleteComponent( string <a href="#UID">UID</a> )</p>
<p class="comment">Remove component with <a href="#UID">UID</a>.
N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">timezone</a> components.</p>
<p class="label">Example 1</p>
Delete first subcomponent.
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$comp1 = $vcalendar->getComponent();
$comp1->deleteComponent( 1 );
.. .</p>
<p class="label">Example 2</p>
Delete all subcomponents.
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$comp1 = $vcalendar->getComponent();
while( $comp1->deleteComponent( &quot;valarm&quot; )
  continue;
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>

<a name="getComponent_PROP"></a><h4>3.4.2 getComponent</h4>
Get subComponent from component.
<p class="label">Format 1</p>
<p class="format">getComponent()</p>
<p class="comment">Get next component until end-of-components.</p>
<p class="label">Format 2</p>
<p class="format">getComponent( int orderNumber )</p>
<p class="comment">Get component with order number (1st=1, 2nd=2.. .).</p>
<p class="label">Format 3</p>
<p class="format">getComponent( string componentType [, int componentSuborderNumber])</p>
<p class="comment">Get (next) component with component type (until end-of-components)
alt. component with component type and suborder number (1st=1, 2nd=2..).</p>
<p class="label">Format 4</p>
<p class="format">getComponent( string <a href="#UID">UID</a> )</p>
<p class="comment">Get component with <a href="#UID">UID</a>.
N.B <a href="#UID">UID</a> is NOT set for <a href="#VALARM">ALARM</a> / <a href="#VTIMEZONE">timezone</a> components.</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot;,
                 &quot;filename&quot;, &quot;file.ics&quot; ); );
$vcalendar = new vcalendar( $config );
$vcalendar->parse();
$comp1 = $vcalendar->getComponent());
while( $subComp = $comp1->getComponent()) {
.. .</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>

<a name="newComponent_PROP"></a><h4>3.4.3 newComponent</h4>
Create subcomponent (<a href="#VALARM">ALARN</a> / <a href="#VTIMEZONE">VTIMEZONE STANDARD</a> / <a href="#VTIMEZONE">VTIMEZONE DAYLIGHT</a>)
using a component factory-method, returning a reference to the new component.
<p class="label">Format</p>
<p class="format">newComponent( string componentType )</p>
<p class="label">Example 1</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vevent = &amp; $vcalendar->newComponent( &quot;vevent&quot; );
$vevent->setProperty( &quot;dtstart&quot; // <span class="ref">add some <a href="#VEVENT">EVENT</a> properties</span>
                    , 2006, 12, 24, 19, 30, 00 );
$vevent->setProperty(.. .
...
$valarm = &amp; $vevent->newComponent( &quot;valarm&quot; );
$valarm->setProperty( &quot;trigger&quot;, .. .
...
</p>
<p class="label">Example 2</p>
<p class="example">$config = array( &quot;unique_id&quot; => &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
...
$vtimezone = &amp; $vcalendar->newComponent( &quot;vtimezone&quot; );
$vtimezone->setProperty(.. .
...
$standard = &amp; $vtimezone->newComponent( &quot;standard&quot; );
$standard->setProperty(.. .
...
$daylight = &amp; $vtimezone->newComponent( &quot;daylight&quot; );
$daylight->setProperty(.. .
...
</p>

<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>

<a name="setComponent_PROP"></a><h4>3.4.4 setComponent</h4>
Add <i>calendar</i> component to <i>calendar</i> or replace/update component in <i>calendar</i>.
<p class="label">Format 1</p>
<p class="format">setComponent( component )
addSubComponent( component ) // <span class="ref">alias</span></p>
<p class="comment">Insert last in component chain.</p>
<p class="label">Format 2</p>
<p class="format">setComponent( component, int orderNumber )</p>
<p class="comment">Replace component with order number(1st=1, 2nd=2.. .).
If orderNumber is not found, component is inserted last in chain.</p>
<p class="label">Format 3</p>
<p class="format">setComponent( component, string componentType [,component suborder number])</p>
<p class="comment">Replace component with component type and component order number.
if orderNumber is not found, component is inserted last in chain. </p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config ); // <span class="ref">initiate new CALENDAR</span>
.. .
$vevent = new vevent();
$vevent->setProperty( &quot;dtstart&quot; // <span class="ref">add some <a href="#VEVENT">EVENT</a> properties</span>
                    , 2006, 12, 24, 19, 30, 00 );
$vevent->setProperty(.. .
.. .
$valarm = new valarm();
$valarm->setProperty( &quot;trigger&quot;, .. .
.. .
$vevent->setComponent( $valarm );
$vcalendar->setComponent( $vevent );
.. .
</p>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#Calendar_component_configuration_functions">[up]</a>

<a name="iCalUtilityFunctions"></a><h1>4. iCalUtilityFunctions</h1>
iCalUtilityFunctions.class.php contains static functions used by iCalcreator,
also usable outside the iCalcreator class. Please examine the class file to explore other functions.
<br>
<br>
<a name="createTimezone"></a><h4>4.1 createTimezone</h4>
The function, applied on a iCalcrator instance and using a <i>PHP</i> valid timezone (as arguments)
creates simple vtimezone, standard and (opt.) daylight components, based on <i>PHP</i> DateTimeZone class and
the most recent transition dates for the timezone.<br>
(<i>PHP</i> 5 >= 5.2.0)
<br>
<br>
Note, only when timezone NOT is UTC.
For dates with UTC DATE-TIME, read <a href="#DATE_WITH_UTC_TIME">this</a>!
<br>
<br>
FALSE is returned if not using a <i>PHP</i> valid timezone.
<p class="label">Format</p>
<p class="format">createTimezone( calendar, timezone [, xprops ] )</p>
<p class="comment">calendar = iCalcreator instance
timezone = an <i>PHP</i> (DateTimeZone) valid timezone
xprops   = array( *[ x-propName =&gt; value ] ), timezone non-standard properties
</p>
<p class="label">Example</p>
<p class="example">$config = array( &quot;unique_id&quot; =&gt; &quot;kigkonsult.se&quot; );
$vcalendar = new vcalendar( $config );
.. .
$PHPtz  = &quot;Europe/Stockholm&quot;;
$xprops = array( &quot;X-LIC-LOCATION&quot; => $PHPtz );
iCalUtilityFunctions::createTimezone( $vcalendar, $PHPtz, $xprops );
.. .
</p>
Output (when using createCalendar or returnCalendar functions):<br>
<span class="ref">
BEGIN:VTIMEZONE<br>
TZID:Europe/Stockholm<br>
X-LIC-LOCATION:Europe/Stockholm<br>
BEGIN:STANDARD<br>
DTSTART:20101031T020000<br>
TZOFFSETFROM:+0200<br>
TZOFFSETTO:+0100<br>
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10<br>
TZNAME:CET<br>
END:STANDARD<br>
BEGIN:DAYLIGHT<br>
DTSTART:20100328T030000<br>
TZOFFSETFROM:+0100<br>
TZOFFSETTO:+0200<br>
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3<br>
TZNAME:CEST<br>
END:DAYLIGHT<br>
END:VTIMEZONE
</span>
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalUtilityFunctions">[up]</a>

<a name="transformDateTime"></a><h4>4.2 transformDateTime</h4>
Transforms a datetime from a time zone to another. (Requires <i>PHP</i> >= 5.2.0 and <i>PHP</i> DateTimeZone acceptable time zones)
<br>
<br>
FALSE is returned if not using a &quot;strtotime&quot; acceptable datetime or unacceptable <i>PHP</i> time zones.
If TRUE, the dateTime argument (below) is converted to the new time zone, otherwise unaltered.
<p class="label">Format</p>
<p class="format">transformDateTime( dateTime, timezoneFrom, timezoneTo [, format ] )</p>
<p class="comment">dateTime     = string datetime // <span class="ref">acceptable by strtotime function
                                    ex. &nbsp;&quot;14 august 2006 16.00.00&quot;
                                    (notice <a class="ref" href="#date_restriction">date restriction</a>)</span>
timezoneFrom = string, a <i>PHP</i> (DateTimeZone) valid time zone
timezoneTo   = string, a <i>PHP</i> (DateTimeZone) valid time zone, default &quot;UTC&quot;
format       = string, format accepted by date(), default &quot;Ymd\THis&quot;
</p>
<p class="label">Example</p>
<p class="example">
.. .
$d    = date( &quot;Y-m-d H:i:s&quot; );
$tzFr = &quot;Europe/Stockholm&quot;;
if( FALSE !== iCalUtilityFunctions::transformDateTime( $d, $tzFr ))
  $event->setProperty( &quot;dtstart&quot;, $d.&quot;Z&quot; );
else
  $event->setProperty( &quot;dtstart&quot;, $d, array( &quot;TZID&quot; => $tzFr ));
.. .<br>
</p>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a> <a href="#iCalUtilityFunctions">[up]</a>

<a name="Copyright_and_Licence"></a><h1>5. COPYRIGHT AND LICENSE</h1>
<h2>Copyright</h2>
iCalcreator class <br>
copyright (c) 2007-2011 Kjell-Inge Gustafsson, kigkonsult<br>
<a href="http://kigkonsult.se/iCalcreator/index.php" title="kigkonsult.se/iCalcreator" target="_blank">kigkonsult.se/iCalcreator</a><br>
ical@kigkonsult.se<br>

<h2>License</h2>

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
<br><br>
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.
<br><br>
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
or download it <a href="http://kigkonsult.se/downloads/dl.php?f=LGPL" target="_blank">here</a>.
<br>
<br>
<a href="#INDEX">[index]</a> <a href="#top">[top]</a>
</body>
</html>